@kando-env/kando-ui 1.2.466-alpha.7 → 1.2.466-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/Router.js +76 -37
- package/lib/Widgets/EventsCarousel/EventsCarousel.js +35 -24
- package/lib/Widgets/EventsRow/EventsRow.js +39 -26
- package/lib/Widgets/Map/GraphUtils.js +6 -4
- package/lib/Widgets/Map/Map.js +138 -99
- package/lib/Widgets/Map/MapUtils.js +101 -83
- package/lib/Widgets/Map/areas/AreaPolygon.js +84 -57
- package/lib/Widgets/Map/areas/AreaPolygons.js +25 -23
- package/lib/Widgets/Map/areas/AreaUtils.js +46 -46
- package/lib/Widgets/Map/areas/Patterns.js +5 -5
- package/lib/Widgets/Map/edges/Edge.js +74 -50
- package/lib/Widgets/Map/edges/Edges.js +24 -19
- package/lib/Widgets/Map/edges/arrows/Arrows.js +45 -24
- package/lib/Widgets/Map/events/Event.js +14 -15
- package/lib/Widgets/Map/events/EventIndicator.js +63 -66
- package/lib/Widgets/Map/events/EventPath.js +34 -33
- package/lib/Widgets/Map/events/EventUtils.js +78 -54
- package/lib/Widgets/Map/events/NetworkForSpecificEvent.js +19 -17
- package/lib/Widgets/Map/events/PointOfEvent.js +36 -27
- package/lib/Widgets/Map/events/PointsForSpecificEvent.js +39 -29
- package/lib/Widgets/Map/events/Snail.js +11 -10
- package/lib/Widgets/Map/graphDNDArea/GraphDNDArea.js +79 -77
- package/lib/Widgets/Map/map/FloatingGraph.js +21 -24
- package/lib/Widgets/Map/map/GraphDateButton.js +20 -27
- package/lib/Widgets/Map/matchGraph/MatchGraph.js +14 -14
- package/lib/Widgets/Map/matchGraph/createFloatingGraph.js +16 -17
- package/lib/Widgets/Map/points/PointIcon.js +22 -23
- package/lib/Widgets/Map/points/PointMarker.js +88 -68
- package/lib/Widgets/Map/points/PointMarkers.js +36 -30
- package/lib/Widgets/Map/points/PointUtils.js +90 -76
- package/lib/Widgets/MostPolluting/Areas/AreaBox/AreaBox.js +43 -25
- package/lib/Widgets/MostPolluting/Areas/AreaBox/Map/Map.js +11 -11
- package/lib/Widgets/MostPolluting/Areas/AreaBox/PieChart/PieChart.js +14 -11
- package/lib/Widgets/MostPolluting/Areas/AreaBox/styles.js +6 -4
- package/lib/Widgets/MostPolluting/Areas/Areas.js +60 -28
- package/lib/Widgets/MostPolluting/Areas/areas.mock.js +4 -3
- package/lib/Widgets/MostPolluting/Areas/areasResponse.interface.js +1 -1
- package/lib/Widgets/MostPolluting/Areas/styles.js +6 -4
- package/lib/Widgets/MostPolluting/EmptyState/EmptyState.js +9 -12
- package/lib/Widgets/MostPolluting/Factories/Factories.js +65 -33
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/CardLayout.js +20 -15
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/FactoryBox.js +20 -15
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PieChart/PieChart.js +10 -9
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/PollutionScore.js +11 -13
- package/lib/Widgets/MostPolluting/Factories/FactoryBox/styles.js +6 -4
- package/lib/Widgets/MostPolluting/Factories/factories.mock.js +3 -2
- package/lib/Widgets/MostPolluting/Factories/factoriesResponse.interface.js +1 -1
- package/lib/Widgets/MostPolluting/Factories/styles.js +6 -4
- package/lib/Widgets/MostPolluting/MostPolluting.js +34 -23
- package/lib/Widgets/MostPolluting/MostPolluting.stories.js +32 -20
- package/lib/Widgets/MostPolluting/ShowMore/ShowMore.js +5 -7
- package/lib/Widgets/MostPolluting/ShowMore/styles.js +6 -7
- package/lib/Widgets/MostPolluting/assets/index.js +12 -12
- package/lib/Widgets/MostPolluting/components/ChangePercent.js +14 -20
- package/lib/Widgets/MostPolluting/components/ChangePercent.test.js +31 -36
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.js +54 -49
- package/lib/Widgets/MostPolluting/components/PollutionScorePercent.test.js +40 -44
- package/lib/Widgets/MostPolluting/components/PotentialImpact.js +27 -28
- package/lib/Widgets/MostPolluting/components/PotentialImpact.test.js +49 -53
- package/lib/Widgets/MostPolluting/models.js +1 -1
- package/lib/Widgets/MostPolluting/styles.js +6 -4
- package/lib/Widgets/PotentialImpactSummary/Back/Back.js +6 -8
- package/lib/Widgets/PotentialImpactSummary/Icon.js +39 -30
- package/lib/Widgets/PotentialImpactSummary/index.js +28 -20
- package/lib/Widgets/PotentialImpactSummary/index.test.js +54 -48
- package/lib/Widgets/PotentialImpactSummary/styles.js +13 -8
- package/lib/Widgets/PotentialImpactSummary/useCasesResponse.interface.js +1 -1
- package/lib/Widgets/QualitySummary/PieChart/LegendMenu/LegendMenu.js +8 -10
- package/lib/Widgets/QualitySummary/PieChart/PieChart.js +18 -23
- package/lib/Widgets/QualitySummary/PieChart/PieChart.test.js +31 -34
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.js +26 -28
- package/lib/Widgets/QualitySummary/PollutedLine/PollutedLine.test.js +38 -35
- package/lib/Widgets/QualitySummary/QualitySummary.js +14 -10
- package/lib/Widgets/QualitySummary/qualitySummary.mock.js +7 -4
- package/lib/Widgets/QualitySummary/qualitySummaryResponse.interface.js +1 -1
- package/lib/Widgets/QualitySummary/styles.js +21 -24
- package/lib/Widgets/UtilityInformation/MapModal/MapModal.js +14 -12
- package/lib/Widgets/UtilityInformation/PopupWithMap/Map/Map.js +25 -25
- package/lib/Widgets/UtilityInformation/PopupWithMap/PopupWithMap.js +21 -26
- package/lib/Widgets/UtilityInformation/UtilityInformation.js +36 -23
- package/lib/Widgets/UtilityInformation/UtilityInformationResponse.interface.js +1 -1
- package/lib/Widgets/UtilityInformation/styles.js +31 -30
- package/lib/Widgets/UtilityInformation/utilityInformation.mock.js +5 -3
- package/lib/assets/icons/TopNavbar/index.js +7 -7
- package/lib/assets/icons/TrendSvg.js +7 -7
- package/lib/assets/icons/index.js +16 -16
- package/lib/assets/icons/kandoStepper/index.js +7 -7
- package/lib/assets/icons/siteTypes/index.js +2 -2
- package/lib/components/ApplyButton/ApplyButton.js +11 -10
- package/lib/components/ApplyButton/index.js +4 -3
- package/lib/components/Backdrop/Backdrop.js +5 -7
- package/lib/components/ContentLoader/ContentLoader.js +10 -12
- package/lib/components/ContentLoader/index.js +2 -2
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.js +12 -12
- package/lib/components/CustomInputs/DoubleTabs/DoubleTabs.stories.js +9 -5
- package/lib/components/CustomInputs/DoubleTabs/styles.js +16 -21
- package/lib/components/CustomInputs/PasswordInput/PasswordInput.js +20 -12
- package/lib/components/CustomInputs/PrimaryButton/PrimaryButton.js +6 -7
- package/lib/components/CustomInputs/Search/Search.js +60 -37
- package/lib/components/CustomInputs/Search/index.js +4 -3
- package/lib/components/CustomInputs/Select/Select.js +55 -38
- package/lib/components/CustomInputs/Select/Select.stories.js +10 -6
- package/lib/components/DamageType/DamageType.js +60 -35
- package/lib/components/DamageType/index.js +4 -3
- package/lib/components/DataLoaderError/DataLoaderError.js +7 -9
- package/lib/components/DischargeHeatmap/DischargeHeatmap.js +13 -11
- package/lib/components/DischargeHeatmap/DischargeHeatmap.test.js +73 -72
- package/lib/components/DischargeHeatmap/DischargeHeatmapContainer.js +37 -25
- package/lib/components/DischargeHeatmap/HighchartsOptions.js +16 -12
- package/lib/components/DischargeHeatmap/index.js +4 -3
- package/lib/components/DischargeHeatmap/mocks/handlers.js +4 -3
- package/lib/components/DischargeHeatmap/popupText.js +12 -11
- package/lib/components/DischargeHeatmap/titles.js +6 -4
- package/lib/components/DischargeHeatmap/types.js +1 -1
- package/lib/components/ErrorBoundary.js +42 -27
- package/lib/components/Events/Events.js +48 -29
- package/lib/components/Events/index.js +4 -3
- package/lib/components/Graph/Graph.js +95 -74
- package/lib/components/Graph/index.js +4 -3
- package/lib/components/Header/Breadcrumbs/Breadcrumbs.js +24 -19
- package/lib/components/Header/Breadcrumbs/index.js +4 -3
- package/lib/components/Header/DoubleTabs/DoubleTabs.js +28 -18
- package/lib/components/Header/DoubleTabs/DoubleTabs.stories.js +9 -5
- package/lib/components/Header/DoubleTabs/styles.js +8 -5
- package/lib/components/Header/Header.js +3 -3
- package/lib/components/Header/Header.stories.js +9 -5
- package/lib/components/Header/InfoBar/Breadcrumbs/Breadcrumbs.js +36 -24
- package/lib/components/Header/InfoBar/InfoBar.js +102 -69
- package/lib/components/Header/InfoBar/Search/Control.js +10 -11
- package/lib/components/Header/InfoBar/Search/GroupLabel.js +7 -8
- package/lib/components/Header/InfoBar/Search/Search.js +24 -17
- package/lib/components/Header/InfoBar/Search/SearchContainer.js +35 -21
- package/lib/components/Header/InfoBar/Search/index.js +4 -3
- package/lib/components/Header/InfoBar/Search/searchStyle.js +49 -36
- package/lib/components/Header/InfoBar/TimeFilter.js +17 -13
- package/lib/components/Header/InfoBar/types.js +1 -1
- package/lib/components/Header/KandoNavbar/KandoNavbar.js +93 -66
- package/lib/components/Header/KandoNavbar/index.js +4 -3
- package/lib/components/Header/Slideshow/Slideshow.js +91 -67
- package/lib/components/Header/Slideshow/index.js +4 -3
- package/lib/components/Header/Toolbar/ClientImg/ClientImg.js +5 -7
- package/lib/components/Header/Toolbar/CustomerMenu/CustomerMenu.js +24 -22
- package/lib/components/Header/Toolbar/MenuCreator/MenuCreator.js +17 -17
- package/lib/components/Header/Toolbar/SearchDropdown/SearchDropdown.js +42 -36
- package/lib/components/Header/Toolbar/Toolbar.js +76 -56
- package/lib/components/InfoBar/InfoBar.js +24 -10
- package/lib/components/InfoBar/InfoBar.stories.js +9 -5
- package/lib/components/KandoModal/KandoModal.js +40 -24
- package/lib/components/KandoModal/index.js +4 -3
- package/lib/components/Link.js +8 -9
- package/lib/components/Links/CustomRedirect/CustomRedirect.js +7 -10
- package/lib/components/Links/StyledLink/StyledLink.js +20 -17
- package/lib/components/Links/StyledNavLink/StyledNavLink.js +10 -12
- package/lib/components/LiveEvents/CarouselSlide.js +10 -11
- package/lib/components/LiveEvents/LiveEvents.js +6 -7
- package/lib/components/LiveEvents/index.js +4 -3
- package/lib/components/LoaderByPercent/LoaderByPercent.js +30 -37
- package/lib/components/Map/Map.js +25 -20
- package/lib/components/Map/index.js +4 -3
- package/lib/components/Modal/Modal.js +10 -10
- package/lib/components/NarrowHeader.js +32 -18
- package/lib/components/PointInfo/PointInfo.js +19 -20
- package/lib/components/PointInfo/index.js +4 -3
- package/lib/components/PopupModal/PopupModal.js +17 -13
- package/lib/components/PopupModal/PopupModal.stories.js +24 -17
- package/lib/components/Sector/Sector.js +40 -34
- package/lib/components/Sector/Sector.test.js +24 -24
- package/lib/components/Sector/SectorIconsNew.js +19 -26
- package/lib/components/Sector/index.js +4 -3
- package/lib/components/Sector/sectorIcons.js +5 -4
- package/lib/components/SevereEvent/Eta/Eta.js +54 -49
- package/lib/components/SevereEvent/Eta/styles.js +8 -11
- package/lib/components/SevereEvent/SevereEvent.js +35 -27
- package/lib/components/Spinner/Spinner.js +8 -8
- package/lib/components/Spinner/Spinner.stories.js +11 -6
- package/lib/components/Spinner/index.js +4 -3
- package/lib/components/Spinner/styles.js +16 -21
- package/lib/components/Tabs/Tabs.js +31 -18
- package/lib/components/Tabs/Tabs.stories.js +10 -6
- package/lib/components/Tabs/assets/index.js +6 -6
- package/lib/components/TimeRangeSelector/KandoRangePicker/ComparisonSelect.js +18 -13
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePicker.js +45 -32
- package/lib/components/TimeRangeSelector/KandoRangePicker/KandoRangePickerContainer.js +34 -20
- package/lib/components/TimeRangeSelector/KandoRangePicker/index.js +4 -3
- package/lib/components/TimeRangeSelector/TimeRangeHelper.js +22 -17
- package/lib/components/TimeRangeSelector/TimeRangeItem/TimeRangeItem.js +14 -13
- package/lib/components/TimeRangeSelector/TimeRangeItem/index.js +4 -3
- package/lib/components/TimeRangeSelector/TimeRangeList.js +27 -24
- package/lib/components/TimeRangeSelector/TimeRangeOptions.js +27 -17
- package/lib/components/TimeRangeSelector/TimeRangeSelector.js +31 -26
- package/lib/components/TimeRangeSelector/TimeRangeSelector.stories.js +10 -6
- package/lib/components/TimeRangeSelector/constants.js +5 -3
- package/lib/components/TimeRangeSelector/index.js +4 -3
- package/lib/components/Toggle/Toggle.js +18 -11
- package/lib/components/Toggle/index.js +4 -3
- package/lib/components/TrendGraph/TrendGraph.js +42 -24
- package/lib/components/TrendGraph/index.js +4 -3
- package/lib/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
- package/lib/components/TrendGraphNVL/index.js +4 -3
- package/lib/development-environment/index.js +13 -9
- package/lib/development-environment/mock/browser.js +5 -2
- package/lib/development-environment/mock/get.js +10 -8
- package/lib/development-environment/mock/handlers.js +3 -2
- package/lib/development-environment/mock/mockBus.js +5 -4
- package/lib/development-environment/mock/mockObjects/area-trends-graph.js +3 -2
- package/lib/development-environment/mock/mockObjects/areaInformation.js +3 -2
- package/lib/development-environment/mock/mockObjects/areaQualitySummary.js +3 -2
- package/lib/development-environment/mock/mockObjects/areaSitesData.js +3 -2
- package/lib/development-environment/mock/mockObjects/areasJson.js +3 -2
- package/lib/development-environment/mock/mockObjects/controlRoomNetworkEdges.js +3 -2
- package/lib/development-environment/mock/mockObjects/covidView-areasData-24.js +3 -2
- package/lib/development-environment/mock/mockObjects/data-menuData.js +3 -2
- package/lib/development-environment/mock/mockObjects/data-search.js +3 -2
- package/lib/development-environment/mock/mockObjects/discharge_effluent_quality.js +3 -2
- package/lib/development-environment/mock/mockObjects/discharge_pattern_overtime.js +3 -2
- package/lib/development-environment/mock/mockObjects/eventFiltersJson.js +3 -2
- package/lib/development-environment/mock/mockObjects/eventsJson.js +3 -2
- package/lib/development-environment/mock/mockObjects/metascore.js +3 -2
- package/lib/development-environment/mock/mockObjects/permissionsJson.js +3 -2
- package/lib/development-environment/mock/mockObjects/pointsJson.js +3 -2
- package/lib/development-environment/mock/mockObjects/site-info.js +3 -2
- package/lib/development-environment/mock/mockObjects/trend-graph-component-data-907.js +3 -2
- package/lib/development-environment/togly/ToglyDashboard.js +23 -13
- package/lib/development-environment/togly/ToglyItem.js +31 -24
- package/lib/development-environment/togly/flags.js +1 -1
- package/lib/development-environment/togly/init.js +4 -4
- package/lib/development-environment/togly/macro.js +9 -13
- package/lib/development-environment/togly/useDoubleKeyDown.js +9 -7
- package/lib/development-environment/togly/useLocalStorage.js +18 -13
- package/lib/hooks/useApi.js +56 -20
- package/lib/hooks/useApiWithDashboardQuery.js +43 -23
- package/lib/hooks/useClickOutside.js +5 -4
- package/lib/hooks/useInitializeHeaders.js +6 -6
- package/lib/hooks/useKandoFetch.js +31 -17
- package/lib/hooks/useMap.js +37 -25
- package/lib/hooks/useNavContext.js +26 -22
- package/lib/hooks/useQueryURL.js +3 -2
- package/lib/hooks/useRemoveExistingLayers.js +8 -7
- package/lib/hooks/useUpdateEventBodyTail.js +19 -14
- package/lib/hooks/useUserTimeZone.js +31 -34
- package/lib/hooks/useUserTimeZone.test.js +23 -19
- package/lib/hooks/useWindowSize.js +14 -7
- package/lib/index.js +13 -11
- package/lib/macros/getVersion.js +2 -2
- package/lib/models/IAction.js +1 -1
- package/lib/models/IAppState.js +1 -1
- package/lib/pages/AreaPage/AreaPage.js +68 -34
- package/lib/pages/AreaPage/Dashboard/AreaMapContainer/AreaMapContainer.js +17 -15
- package/lib/pages/AreaPage/Dashboard/Dashboard.js +27 -25
- package/lib/pages/AreaPage/Dashboard/LineChart/LineChart.js +23 -14
- package/lib/pages/AreaPage/Dashboard/LineChart/options/options.js +5 -5
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/PieChart/PieChart.js +8 -8
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/SiteBox.js +10 -10
- package/lib/pages/AreaPage/Dashboard/Sites/SitesBox/styles.js +6 -4
- package/lib/pages/AreaPage/Dashboard/Sites/SitesResponse.interface.js +1 -1
- package/lib/pages/AreaPage/Dashboard/Sites/factories.mock.js +3 -2
- package/lib/pages/AreaPage/Dashboard/Sites/styles.js +8 -5
- package/lib/pages/AssessmentPage/AssessmentPage.js +46 -38
- package/lib/pages/CannyWidget/Feedback.js +16 -14
- package/lib/pages/CovidPage/CovidPage.js +16 -9
- package/lib/pages/CovidPage/components/Body.js +30 -26
- package/lib/pages/CovidPage/components/Map.js +40 -28
- package/lib/pages/CovidPage/components/Sidebar.js +16 -15
- package/lib/pages/CovidPage/components/Summary.js +29 -20
- package/lib/pages/CovidPage/components/TrendGraphNVL/TrendGraphNVL.js +33 -26
- package/lib/pages/CovidPage/components/TrendGraphNVL/index.js +4 -3
- package/lib/pages/CovidPage/components/TrendPopupContent/TrendPopupContent.js +76 -52
- package/lib/pages/CovidPage/components/TrendPopupContent/index.js +4 -3
- package/lib/pages/CovidPage/components/areas/Area.js +36 -24
- package/lib/pages/CovidPage/components/areas/AreaPolygonWBE.js +46 -45
- package/lib/pages/CovidPage/components/areas/AreaPolygonsWBE.js +36 -32
- package/lib/pages/CovidPage/components/areas/AreasList.js +42 -29
- package/lib/pages/CovidPage/components/areas/Sort.js +17 -12
- package/lib/pages/CovidPage/components/nvlStatusHelper.js +11 -11
- package/lib/pages/DashboardMap/AreaCard.js +27 -27
- package/lib/pages/DashboardMap/AssessmentIcon.js +7 -8
- package/lib/pages/DashboardMap/Capacity.js +77 -28
- package/lib/pages/DashboardMap/FactoryCard.js +24 -28
- package/lib/pages/DashboardMap/HighchartsOptions.js +5 -6
- package/lib/pages/DashboardMap/List.js +65 -55
- package/lib/pages/DashboardMap/ListContext.js +19 -14
- package/lib/pages/DashboardMap/Loader.js +3 -3
- package/lib/pages/DashboardMap/SeverityBadge.js +24 -16
- package/lib/pages/DashboardMap/WWTPMap.js +71 -57
- package/lib/pages/DashboardMap/WaterDischarge.js +9 -9
- package/lib/pages/DashboardMap/Widget.js +67 -48
- package/lib/pages/DashboardMap/index.js +4 -3
- package/lib/pages/DashboardMap/utils.js +60 -41
- package/lib/pages/EventsPage/Body/Body.js +12 -15
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropContainer.js +20 -17
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropUtils.js +27 -16
- package/lib/pages/EventsPage/DragAndDropArea/DragAndDropWrapper.js +9 -10
- package/lib/pages/EventsPage/DragAndDropArea/DraggableItem.js +10 -13
- package/lib/pages/EventsPage/DragAndDropArea/DraggableList.js +31 -22
- package/lib/pages/EventsPage/DragAndDropArea/index.js +4 -3
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainer.js +38 -30
- package/lib/pages/EventsPage/EventsMapContainer/EventsMapContainerHelpers.js +23 -14
- package/lib/pages/EventsPage/EventsPage.js +17 -10
- package/lib/pages/EventsPage/FloatingGraph/FloatingGraph.js +40 -26
- package/lib/pages/EventsPage/events/MoreInfo.js +19 -18
- package/lib/pages/EventsPage/events/Sidebar.js +11 -14
- package/lib/pages/EventsPage/events/event_info/Contaminants/Contaminants.js +10 -9
- package/lib/pages/EventsPage/events/event_info/Contaminants/ContaminantsList.js +24 -19
- package/lib/pages/EventsPage/events/event_info/Contaminants/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/EarlyWarnings.js +38 -31
- package/lib/pages/EventsPage/events/event_info/EventDetails.js +32 -34
- package/lib/pages/EventsPage/events/event_info/EventInfo.js +60 -50
- package/lib/pages/EventsPage/events/event_info/EventPath/EventPath.js +5 -5
- package/lib/pages/EventsPage/events/event_info/EventSection.js +21 -18
- package/lib/pages/EventsPage/events/event_info/EventSection.test.js +39 -44
- package/lib/pages/EventsPage/events/event_info/EventTimeRange.js +50 -39
- package/lib/pages/EventsPage/events/event_info/Header/Header.js +7 -8
- package/lib/pages/EventsPage/events/event_info/Header/HeaderContainer.js +34 -29
- package/lib/pages/EventsPage/events/event_info/Header/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/HistoricalInformation.js +7 -6
- package/lib/pages/EventsPage/events/event_info/MiniEventTree.js +39 -30
- package/lib/pages/EventsPage/events/event_info/MobileEventPath.js +9 -6
- package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionAssessment.js +15 -14
- package/lib/pages/EventsPage/events/event_info/PollutionAssessment /PollutionTypesList.js +12 -9
- package/lib/pages/EventsPage/events/event_info/PollutionAssessment /index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/PollutionDischarge.js +24 -23
- package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResult.js +22 -13
- package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/LabResultButton.js +6 -7
- package/lib/pages/EventsPage/events/event_info/SamplingList/LabResult/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/SamplingList/SamplingDetails.js +12 -13
- package/lib/pages/EventsPage/events/event_info/SamplingList/Samplings.js +28 -22
- package/lib/pages/EventsPage/events/event_info/SamplingList/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/SeverityScore/ScoreExplanation.js +10 -13
- package/lib/pages/EventsPage/events/event_info/SeverityScore/SeverityScore.js +9 -8
- package/lib/pages/EventsPage/events/event_info/SeverityScore/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Confidence.js +9 -9
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.js +5 -4
- package/lib/pages/EventsPage/events/event_info/SourceDetails/Discharging.test.js +11 -13
- package/lib/pages/EventsPage/events/event_info/SourceDetails/IconAndTitles.js +5 -7
- package/lib/pages/EventsPage/events/event_info/SourceDetails/MoreInfoButton.js +14 -11
- package/lib/pages/EventsPage/events/event_info/SourceDetails/OtherSources.js +6 -7
- package/lib/pages/EventsPage/events/event_info/SourceDetails/PotentialSources.js +8 -9
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SingleSource.js +8 -9
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceCardBody.js +7 -8
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.js +12 -13
- package/lib/pages/EventsPage/events/event_info/SourceDetails/SourceDetails.test.js +19 -18
- package/lib/pages/EventsPage/events/event_info/SourceDetails/WaterDischarge.js +7 -7
- package/lib/pages/EventsPage/events/event_info/Timelines/DischargeBox.js +8 -9
- package/lib/pages/EventsPage/events/event_info/Timelines/EarlyWarning.js +18 -19
- package/lib/pages/EventsPage/events/event_info/Timelines/LiveStatusBadge.js +7 -6
- package/lib/pages/EventsPage/events/event_info/Timelines/SeenBox.js +12 -13
- package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.js +19 -23
- package/lib/pages/EventsPage/events/event_info/Timelines/Timelines.test.js +11 -12
- package/lib/pages/EventsPage/events/event_info/Timelines/Titles.js +7 -8
- package/lib/pages/EventsPage/events/event_info/Timelines/index.js +4 -3
- package/lib/pages/EventsPage/events/event_info/Timelines/style.js +6 -4
- package/lib/pages/EventsPage/events/event_info/charts/EventDetailsPieChart.js +40 -25
- package/lib/pages/EventsPage/events/event_info/damage_type/DamageType.js +39 -30
- package/lib/pages/EventsPage/events/event_info/samplingsOld/Sampling.js +12 -13
- package/lib/pages/EventsPage/events/event_info/samplingsOld/Samplings.js +20 -17
- package/lib/pages/EventsPage/events/event_info/sources/Source.js +31 -27
- package/lib/pages/EventsPage/events/event_info/sources/Sources.js +27 -22
- package/lib/pages/EventsPage/events/event_info/styles.js +15 -21
- package/lib/pages/EventsPage/events/events_list/EventItem.js +21 -18
- package/lib/pages/EventsPage/events/events_list/EventUtils.js +11 -11
- package/lib/pages/EventsPage/events/events_list/EventsList.js +136 -111
- package/lib/pages/EventsPage/events/events_list/Filter/Filter.js +58 -41
- package/lib/pages/EventsPage/events/events_list/Filter/FilterContainer.js +135 -90
- package/lib/pages/EventsPage/events/events_list/Filter/FilterItem.js +73 -54
- package/lib/pages/EventsPage/events/events_list/Filter/FiltersDropDown.js +44 -39
- package/lib/pages/EventsPage/events/events_list/Filter/OptionsDropDown.js +41 -32
- package/lib/pages/EventsPage/events/events_list/Filter/SingleSelect.js +21 -19
- package/lib/pages/EventsPage/events/events_list/Sort.js +19 -14
- package/lib/pages/ImportFileWizard/FileUploadRespones.js +22 -14
- package/lib/pages/ImportFileWizard/ImportButtomButtons.js +8 -9
- package/lib/pages/ImportFileWizard/ImportFile.js +25 -21
- package/lib/pages/ImportFileWizard/ResponseBody.js +36 -26
- package/lib/pages/ImportFileWizard/ValidationForm.js +23 -23
- package/lib/pages/ImportFileWizard/ValidationResponse.js +25 -23
- package/lib/pages/ImportFileWizard/importFileUtils.js +5 -4
- package/lib/pages/ImportFileWizard/index.js +4 -3
- package/lib/pages/ImportGisPage/ImportGisContainer.js +27 -22
- package/lib/pages/ImportGisPage/ImportedGisFilesPage.js +44 -38
- package/lib/pages/ImportGisPage/importGisUtils.js +52 -43
- package/lib/pages/ImportGisProcess/index.js +18 -14
- package/lib/pages/ImportSiteProcess/index.js +18 -14
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/MultiChoiceTabs.js +13 -7
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/RadioTabs.js +20 -18
- package/lib/pages/NotificationsPage/EditNotificationModal/Buttons/SeverityButtons.js +4 -4
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.js +60 -28
- package/lib/pages/NotificationsPage/EditNotificationModal/EditNotificationModal.stories.js +12 -8
- package/lib/pages/NotificationsPage/Notification/Notification.js +13 -17
- package/lib/pages/NotificationsPage/Notifications.interface.js +1 -1
- package/lib/pages/NotificationsPage/Notifications.mock.js +3 -2
- package/lib/pages/NotificationsPage/Notifications.stories.js +10 -6
- package/lib/pages/NotificationsPage/NotificationsPage.js +38 -19
- package/lib/pages/NotificationsPage/assets/index.js +10 -10
- package/lib/pages/NotificationsPageV2/NotificationsPage.js +101 -72
- package/lib/pages/NotificationsPageV2/components/NotificationsCard.js +65 -95
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/EventType.js +15 -13
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSendVia.js +17 -19
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSensors.js +22 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationSources.js +22 -18
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationTags.js +23 -19
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/NotificationsFormContent.js +71 -82
- package/lib/pages/NotificationsPageV2/components/NotificationsForm/WaterAuthoritySelection.js +23 -19
- package/lib/pages/NotificationsPageV2/components/NotificationsSidebar.js +74 -71
- package/lib/pages/NotificationsPageV2/components/NotificationsUtils.js +94 -80
- package/lib/pages/NotificationsPageV2/notificationUtils.js +39 -40
- package/lib/pages/OldSitePage/IDashboardData.js +1 -1
- package/lib/pages/OldSitePage/OldSitePage.js +132 -56
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.js +10 -6
- package/lib/pages/OldSitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +7 -9
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +19 -16
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
- package/lib/pages/OldSitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +19 -12
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +64 -51
- package/lib/pages/OldSitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.js +54 -29
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.mock.js +7 -4
- package/lib/pages/OldSitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
- package/lib/pages/OldSitePage/SamplingParameters/charts/ParametersChart.js +11 -11
- package/lib/pages/OldSitePage/SamplingParameters/charts/SamplingChart.js +12 -10
- package/lib/pages/OldSitePage/SamplingParameters/charts/options/options.js +23 -27
- package/lib/pages/OldSitePage/SamplingParameters/dataParser.js +30 -28
- package/lib/pages/OldSitePage/SamplingParameters/models.js +1 -1
- package/lib/pages/OldSitePage/SamplingParameters/styles/samplingParameters.js +8 -5
- package/lib/pages/OldSitePage/SamplingParameters/styles/styles.js +12 -16
- package/lib/pages/OperationsPage/LeftPanel.js +55 -35
- package/lib/pages/OperationsPage/Map/Map.js +12 -12
- package/lib/pages/OperationsPage/Map/useMap.js +64 -52
- package/lib/pages/OperationsPage/OperationsContainerPage.js +59 -32
- package/lib/pages/OperationsPage/OperationsFilePage.js +12 -10
- package/lib/pages/OperationsPage/OperationsUtilityPage.js +6 -5
- package/lib/pages/OperationsPage/RightPanel.js +25 -22
- package/lib/pages/OperationsPage/index.js +4 -4
- package/lib/pages/PollutionRiskAssessment/FactoryDetails.js +60 -27
- package/lib/pages/PollutionRiskAssessment/FilterBehaviors.js +25 -19
- package/lib/pages/PollutionRiskAssessment/FilterButton.js +10 -11
- package/lib/pages/PollutionRiskAssessment/Map.js +42 -38
- package/lib/pages/PollutionRiskAssessment/SearchButton.js +10 -11
- package/lib/pages/PollutionRiskAssessment/SearchField.js +40 -26
- package/lib/pages/PollutionRiskAssessment/TotalSavings.js +16 -16
- package/lib/pages/PollutionRiskAssessment/UseCases.js +34 -32
- package/lib/pages/PollutionRiskAssessment/index.js +136 -76
- package/lib/pages/PollutionRiskAssessment/useMap.js +50 -34
- package/lib/pages/PollutionRiskAssessment/utils.js +7 -7
- package/lib/pages/ProfilePage/Container.js +4 -3
- package/lib/pages/ProfilePage/PasswordModal/PasswordModal.js +40 -23
- package/lib/pages/ProfilePage/ProfilePage.js +205 -106
- package/lib/pages/ProfilePage/TelegramModal/TelegramModal.js +34 -25
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.js +20 -20
- package/lib/pages/SamplingsPage/ActionsDropDown/LabResultValue.test.js +30 -27
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionContainer.js +119 -57
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActionDropdown.js +23 -18
- package/lib/pages/SamplingsPage/ActionsDropDown/SamplingActions.js +13 -14
- package/lib/pages/SamplingsPage/ActionsDropDown/ViewLabResult.js +45 -40
- package/lib/pages/SamplingsPage/DesktopActions/DesktopActions.js +24 -25
- package/lib/pages/SamplingsPage/DesktopActions/DownloadCSV.js +19 -18
- package/lib/pages/SamplingsPage/DesktopActions/UploadLabResult.js +18 -15
- package/lib/pages/SamplingsPage/DesktopActions/index.js +4 -3
- package/lib/pages/SamplingsPage/NavigationDropdown.js +31 -43
- package/lib/pages/SamplingsPage/NewSamplingAction.js +102 -75
- package/lib/pages/SamplingsPage/SamplingMobileModal.js +98 -124
- package/lib/pages/SamplingsPage/SamplingProperties/ImageDeleteModal.js +25 -23
- package/lib/pages/SamplingsPage/SamplingProperties/ImagePreviewModal.js +25 -36
- package/lib/pages/SamplingsPage/SamplingProperties/ImageUpload.js +61 -36
- package/lib/pages/SamplingsPage/SamplingProperties/ManholeImageMobile.js +21 -16
- package/lib/pages/SamplingsPage/SamplingProperties/SamplerInProcess.js +9 -10
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingProperties.js +193 -108
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesForm.js +54 -47
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHead.js +39 -42
- package/lib/pages/SamplingsPage/SamplingProperties/SamplingPropertiesHeadMobile.js +39 -42
- package/lib/pages/SamplingsPage/SamplingProperties/samplingPropertiesUtils.js +28 -21
- package/lib/pages/SamplingsPage/SamplingProperties/styles.js +6 -4
- package/lib/pages/SamplingsPage/SamplingSiteTableCell.js +7 -11
- package/lib/pages/SamplingsPage/SamplingsMobileItem.js +53 -51
- package/lib/pages/SamplingsPage/SamplingsMobileList.js +31 -22
- package/lib/pages/SamplingsPage/SamplingsPage.js +33 -25
- package/lib/pages/SamplingsPage/SamplingsPageContainer.js +58 -49
- package/lib/pages/SamplingsPage/index.js +3 -2
- package/lib/pages/SamplingsPage/samplingsPageUtils.js +83 -52
- package/lib/pages/SitePage/DischargePattern/DischargePattern.js +6 -7
- package/lib/pages/SitePage/PollutionContributor/PollutionContributor.js +16 -16
- package/lib/pages/SitePage/PollutionContributor/PollutionContributorContainer.js +16 -12
- package/lib/pages/SitePage/PollutionContributor/contributorUtils.js +16 -16
- package/lib/pages/SitePage/PollutionContributor/index.js +4 -3
- package/lib/pages/SitePage/SamplingParameters/NoResults/NoResults.stories.js +9 -5
- package/lib/pages/SitePage/SamplingParameters/NoResults/index.js +15 -15
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.js +9 -10
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParameterButton/ParameterButton.test.js +24 -27
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.js +16 -12
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/ParametersButtons.test.js +33 -37
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersButtons/styles.js +12 -10
- package/lib/pages/SitePage/SamplingParameters/ParametersContainer/ParametersContainer.js +25 -15
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.js +11 -14
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/ExceptionBar.stories.js +9 -5
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExceptionBar/styles.js +16 -18
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/ExpandableSamplingTable/ExpandableSamplingTable.js +71 -58
- package/lib/pages/SitePage/SamplingParameters/SamplingContainer/SamplingContainer.js +8 -10
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.js +27 -15
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.mock.js +9 -5
- package/lib/pages/SitePage/SamplingParameters/SamplingParameters.stories.js +19 -12
- package/lib/pages/SitePage/SamplingParameters/body/Body.js +9 -10
- package/lib/pages/SitePage/SamplingParameters/body/BodyContainer.js +40 -30
- package/lib/pages/SitePage/SamplingParameters/body/index.js +4 -3
- package/lib/pages/SitePage/SamplingParameters/charts/ParametersChart.js +12 -11
- package/lib/pages/SitePage/SamplingParameters/charts/SamplingChart.js +12 -10
- package/lib/pages/SitePage/SamplingParameters/charts/options/options.js +54 -54
- package/lib/pages/SitePage/SamplingParameters/dataParser.js +41 -32
- package/lib/pages/SitePage/SamplingParameters/dataParser.test.js +9 -11
- package/lib/pages/SitePage/SamplingParameters/models.js +1 -1
- package/lib/pages/SitePage/SamplingParameters/styles/samplingParameters.js +8 -5
- package/lib/pages/SitePage/SamplingParameters/styles/styles.js +12 -16
- package/lib/pages/SitePage/SiteInformation/EmptyState.js +10 -13
- package/lib/pages/SitePage/SiteInformation/SiteInformation.js +31 -31
- package/lib/pages/SitePage/SitePage.js +76 -36
- package/lib/pages/UploadLabResult/index.js +16 -15
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.js +37 -27
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/MostSevereEvents.stories.js +13 -8
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.js +15 -11
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/NoEvents/NoEvents.stories.js +9 -5
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/Eta.js +50 -47
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/Eta/styles.js +8 -11
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/LinkedSevereEvent.js +5 -4
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/OptionalLinkedSevereEvent.js +9 -6
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/SevereEvent/SevereEvent.js +10 -11
- package/lib/pages/UtilityDashboardPage/MostSevereEvents/models.js +1 -1
- package/lib/pages/UtilityDashboardPage/TopBar/TopBar.js +13 -16
- package/lib/pages/UtilityDashboardPage/TopBar/constants.js +8 -8
- package/lib/pages/UtilityDashboardPage/TopBar/styles.js +4 -3
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.js +30 -20
- package/lib/pages/UtilityDashboardPage/UtilityDashboard.stories.js +40 -28
- package/lib/pages/UtilityDashboardPage/UtilityDashboardMapContainer/UtilityDashboardMapContainer.js +17 -15
- package/lib/pages/UtilityDashboardPage/UtilityDashboardPage.js +14 -7
- package/lib/pages/UtilityDashboardPage/VirtualAreaDashboardPage.js +31 -26
- package/lib/pages/WbeDashboard/ExpandableComponent.js +9 -9
- package/lib/pages/WbeDashboard/GraphWrapper.js +35 -28
- package/lib/pages/WbeDashboard/IndividualTinyGraph.js +19 -16
- package/lib/pages/WbeDashboard/SearchInput.js +21 -15
- package/lib/pages/WbeDashboard/SummaryGraph.js +77 -50
- package/lib/pages/WbeDashboard/SummaryGraphModal.js +18 -20
- package/lib/pages/WbeDashboard/Tabs.js +11 -11
- package/lib/pages/WbeDashboard/WbeDashboardPage.js +210 -147
- package/lib/pages/WbeDashboard/WbeSummaryBar.js +48 -39
- package/lib/pages/WwtpPage/DashboardCard.js +21 -25
- package/lib/pages/WwtpPage/DischargePatternCard.js +25 -14
- package/lib/pages/WwtpPage/InletsCard/InletsBar.js +11 -11
- package/lib/pages/WwtpPage/InletsCard/InletsCard.js +22 -22
- package/lib/pages/WwtpPage/InletsCard/index.js +4 -3
- package/lib/pages/WwtpPage/Map.js +6 -6
- package/lib/pages/WwtpPage/OrganicCard.js +5 -4
- package/lib/pages/WwtpPage/PotentialSaving/ImpactCard.js +5 -4
- package/lib/pages/WwtpPage/PotentialSaving/PotentialItem.js +7 -8
- package/lib/pages/WwtpPage/PotentialSaving/PotentialSaving.js +11 -11
- package/lib/pages/WwtpPage/PotentialSaving/PotentialSavingContainer.js +17 -20
- package/lib/pages/WwtpPage/PotentialSaving/index.js +4 -3
- package/lib/pages/WwtpPage/PotentialSaving/types.js +1 -1
- package/lib/pages/WwtpPage/PredictionCard.js +5 -4
- package/lib/pages/WwtpPage/TrendCard.js +22 -20
- package/lib/pages/WwtpPage/UpgradeBox.js +5 -4
- package/lib/pages/WwtpPage/WwtpPage.js +8 -9
- package/lib/pages/WwtpPage/WwtpPageContainer.js +19 -23
- package/lib/pages/WwtpPage/index.js +4 -3
- package/lib/providers/Slideshow/SlideshowContext.js +10 -11
- package/lib/providers/Slideshow/SlideshowProvider.js +40 -22
- package/lib/providers/Slideshow/SlideshowRunner.js +21 -18
- package/lib/providers/UrlHistory/UrlHistoryContext.js +6 -7
- package/lib/providers/UrlHistory/UrlHistoryProvider.js +13 -12
- package/lib/providers/UrlHistory/index.js +4 -4
- package/lib/providers/UrlHistory/useLastVisited.js +6 -5
- package/lib/react-app-env.d.js +1 -1
- package/lib/store/ImportGis/action.js +1 -1
- package/lib/store/ImportGis/actionTypes.js +5 -4
- package/lib/store/ImportGis/actionsCreator.js +5 -7
- package/lib/store/ImportGis/models/gisImports.js +1 -1
- package/lib/store/ImportGis/reducer.js +7 -9
- package/lib/store/WBE/actionTypes.js +3 -2
- package/lib/store/WBE/actions.js +1 -1
- package/lib/store/WBE/models/IAreaWBE.js +1 -1
- package/lib/store/WBE/models/IWBE.js +1 -1
- package/lib/store/WBE/models/IWBEState.js +1 -1
- package/lib/store/WBE/reducer.js +8 -10
- package/lib/store/WWTPDashboard/WWTPDashboardSlice.js +15 -24
- package/lib/store/WWTPDashboard/types.js +1 -1
- package/lib/store/areas/actionTypes.js +7 -4
- package/lib/store/areas/actions.js +13 -7
- package/lib/store/areas/models/IArea.js +1 -1
- package/lib/store/areas/models/IAreasState.js +1 -1
- package/lib/store/areas/reducer.js +6 -8
- package/lib/store/context/actionTypes.js +5 -3
- package/lib/store/context/actions.js +3 -3
- package/lib/store/context/contextMiddlewares.js +18 -15
- package/lib/store/context/models/INavContext.js +1 -1
- package/lib/store/context/models/INavContextState.js +1 -1
- package/lib/store/context/reducer.js +8 -10
- package/lib/store/dashboard/dashboardSlice.js +11 -18
- package/lib/store/dashboard/periodType.js +1 -1
- package/lib/store/edges/actionTypes.js +9 -5
- package/lib/store/edges/actions.js +8 -4
- package/lib/store/edges/models/IEdge.js +1 -1
- package/lib/store/edges/models/IEdgesState.js +1 -1
- package/lib/store/edges/reducer.js +17 -13
- package/lib/store/events/actionTypes.js +33 -17
- package/lib/store/events/actions.js +7 -3
- package/lib/store/events/models/IEvent.js +1 -1
- package/lib/store/events/models/IEventsState.js +1 -1
- package/lib/store/events/models/ISource.js +1 -1
- package/lib/store/events/reducer.js +39 -28
- package/lib/store/filters/IFilter.js +1 -1
- package/lib/store/filters/IFilterItem.js +1 -1
- package/lib/store/global/actionTypes.js +21 -11
- package/lib/store/global/actions.js +6 -8
- package/lib/store/global/models/IGlobalState.js +1 -1
- package/lib/store/global/reducer.js +7 -9
- package/lib/store/permissions/permissionsSlice.js +9 -12
- package/lib/store/points/actionTypes.js +5 -3
- package/lib/store/points/actions.js +10 -6
- package/lib/store/points/models/IGeoPoint.js +1 -1
- package/lib/store/points/models/IGroup.js +1 -1
- package/lib/store/points/models/IIssue.js +1 -1
- package/lib/store/points/models/IPoint.js +1 -1
- package/lib/store/points/models/IPointsState.js +1 -1
- package/lib/store/points/reducer.js +5 -7
- package/lib/store/rootActionTypes.js +3 -2
- package/lib/store/rootActions.js +1 -1
- package/lib/store/rootReducer.js +10 -12
- package/lib/store/rootStore.js +6 -6
- package/lib/store/samplings/action.js +1 -1
- package/lib/store/samplings/actionTypes.js +5 -4
- package/lib/store/samplings/actionsCreator.js +1 -1
- package/lib/store/samplings/models/Samplings.js +1 -1
- package/lib/store/samplings/reducer.js +10 -10
- package/lib/styles/StylesLayout.js +6 -7
- package/lib/styles/theme/theme.js +26 -23
- package/lib/test/mocks/browser.js +5 -2
- package/lib/test/test-utils.js +9 -12
- package/lib/ui-kit/Alert/KandoAlert.js +6 -8
- package/lib/ui-kit/Button/Button.js +83 -129
- package/lib/ui-kit/Button/Button.test.js +33 -27
- package/lib/ui-kit/Button/ButtonUtils.js +1 -1
- package/lib/ui-kit/Checkbox/Checkbox.js +27 -34
- package/lib/ui-kit/ContentCard/ContentCard.js +20 -16
- package/lib/ui-kit/Dashboard/Dashboard.js +28 -29
- package/lib/ui-kit/Dashboard/index.js +4 -3
- package/lib/ui-kit/DropDown/DropDown.js +22 -23
- package/lib/ui-kit/DropDown/DropDown.test.js +13 -13
- package/lib/ui-kit/DropDown/DropDownItem.js +25 -26
- package/lib/ui-kit/DropDown/DropdownToggle.js +10 -13
- package/lib/ui-kit/EmptyState/EmptyState.js +6 -7
- package/lib/ui-kit/HierarchyGraph/AutoFitTree.js +81 -69
- package/lib/ui-kit/HierarchyGraph/HierarchyGraph.js +167 -89
- package/lib/ui-kit/HierarchyGraph/LeafSign.js +7 -7
- package/lib/ui-kit/HierarchyGraph/MicroStackedBar.js +19 -17
- package/lib/ui-kit/HierarchyGraph/NodeIcon.js +8 -9
- package/lib/ui-kit/HierarchyGraph/NodeLayout.js +25 -22
- package/lib/ui-kit/HierarchyGraph/PollutionContributorNode.js +10 -11
- package/lib/ui-kit/HierarchyGraph/ScoreNode.js +9 -10
- package/lib/ui-kit/HierarchyGraph/index.js +4 -3
- package/lib/ui-kit/HierarchyGraph/utils.js +67 -57
- package/lib/ui-kit/IconAction/IconAction.js +8 -9
- package/lib/ui-kit/ImageUploadButton/ImageUploadButton.js +64 -47
- package/lib/ui-kit/InfoTooltip/InfoTooltip.js +49 -58
- package/lib/ui-kit/InletsPie/InletsPie.js +16 -17
- package/lib/ui-kit/InletsPie/index.js +4 -3
- package/lib/ui-kit/InletsPie/options.js +9 -7
- package/lib/ui-kit/KandoBottomSheet/KandoBottomSheet.js +38 -29
- package/lib/ui-kit/KandoFilter/KandoFilter.js +11 -10
- package/lib/ui-kit/KandoList/KandoList.js +12 -13
- package/lib/ui-kit/KandoList/kandoListUtils.js +1 -1
- package/lib/ui-kit/KandoTable/KandoTable.js +41 -48
- package/lib/ui-kit/KandoTable/KandoTable.test.js +27 -21
- package/lib/ui-kit/KandoTable/kandoTableUtils.js +1 -1
- package/lib/ui-kit/Layout/Layout.js +7 -8
- package/lib/ui-kit/MobileInput/MobileInput.js +50 -56
- package/lib/ui-kit/ModalConfirmation/ModalConfirmation.js +17 -14
- package/lib/ui-kit/ModalConfirmation/index.js +3 -2
- package/lib/ui-kit/OrganicEvents/GaugeChart.js +8 -9
- package/lib/ui-kit/OrganicEvents/OrganicEvents.js +9 -8
- package/lib/ui-kit/OrganicEvents/OrganicEventsContainer.js +22 -26
- package/lib/ui-kit/OrganicEvents/TextInfo.js +13 -17
- package/lib/ui-kit/OrganicEvents/index.js +4 -3
- package/lib/ui-kit/RadioButtons/RadioButtonGroup.js +11 -12
- package/lib/ui-kit/SamplingStatus/SamplingStatus.js +21 -17
- package/lib/ui-kit/SamplingStatus/SamplingStatusHelper.js +4 -3
- package/lib/ui-kit/ScoreGauge/ScoreGauge.js +24 -21
- package/lib/ui-kit/ScoreGauge/constant.js +4 -3
- package/lib/ui-kit/ScoreGauge/index.js +4 -3
- package/lib/ui-kit/TimeLineChart/TrendChart.js +28 -25
- package/lib/ui-kit/TimeLineChart/index.js +4 -3
- package/lib/ui-kit/TitleAndCloseHeader/TitleAndCloseHeader.js +11 -10
- package/lib/ui-kit/Tooltip/Tooltip.js +9 -15
- package/lib/ui-kit/index.js +8 -8
- package/lib/ui-kit/kandoStepper/KandoStepper.js +14 -13
- package/lib/ui-kit/siteName/SiteName.js +11 -13
- package/lib/utilities/ActionUtility.js +7 -7
- package/lib/utilities/Alert.js +20 -23
- package/lib/utilities/Analytics.js +19 -19
- package/lib/utilities/Array.js +5 -4
- package/lib/utilities/Enum.js +51 -15
- package/lib/utilities/ErrorBoundary.js +42 -27
- package/lib/utilities/File.js +73 -45
- package/lib/utilities/GetDir.js +10 -10
- package/lib/utilities/KandoDate.js +15 -7
- package/lib/utilities/KandoModal.js +28 -16
- package/lib/utilities/LocalStorage.js +7 -5
- package/lib/utilities/ThousandsToK.js +2 -2
- package/lib/utilities/TimeFormat.js +23 -22
- package/lib/utilities/Truncate.js +27 -17
- package/lib/utilities/edgesMath.js +16 -15
- package/lib/utilities/i18n.js +6 -5
- package/lib/utilities/kql.js +12 -10
- package/lib/utilities/map/icons.js +18 -18
- package/lib/utilities/polylinedecorator.js +113 -88
- package/lib/utilities/scoreToData.js +26 -20
- package/lib/utilities/scoreToData.test.js +5 -5
- package/lib/utilities/time.js +10 -9
- package/lib/utilities/uploadToS3.js +12 -12
- package/lib/utilities/urls.js +14 -17
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
@@ -27,23 +27,23 @@ _leaflet.default.Symbol.Dash = _leaflet.default.Class.extend({
|
|
|
27
27
|
pixelSize: 10,
|
|
28
28
|
pathOptions: {}
|
|
29
29
|
},
|
|
30
|
-
initialize: function (options) {
|
|
30
|
+
initialize: function initialize(options) {
|
|
31
31
|
_leaflet.default.Util.setOptions(this, options);
|
|
32
32
|
this.options.pathOptions.clickable = false;
|
|
33
33
|
},
|
|
34
|
-
buildSymbol: function (dirPoint, latLngs, map, index, total) {
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
|
|
35
|
+
var opts = this.options;
|
|
36
|
+
var d2r = Math.PI / 180;
|
|
37
37
|
|
|
38
38
|
// for a dot, nothing more to compute
|
|
39
39
|
if (opts.pixelSize <= 1) {
|
|
40
40
|
return _leaflet.default.polyline([dirPoint.latLng, dirPoint.latLng], opts.pathOptions);
|
|
41
41
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
var midPoint = map.project(dirPoint.latLng);
|
|
43
|
+
var angle = -(dirPoint.heading - 90) * d2r;
|
|
44
|
+
var a = _leaflet.default.point(midPoint.x + opts.pixelSize * Math.cos(angle + Math.PI) / 2, midPoint.y + opts.pixelSize * Math.sin(angle) / 2);
|
|
45
45
|
// compute second point by central symmetry to avoid unecessary cos/sin
|
|
46
|
-
|
|
46
|
+
var b = midPoint.add(midPoint.subtract(a));
|
|
47
47
|
return _leaflet.default.polyline([map.unproject(a), map.unproject(b)], opts.pathOptions);
|
|
48
48
|
}
|
|
49
49
|
});
|
|
@@ -60,22 +60,22 @@ _leaflet.default.Symbol.ArrowHead = _leaflet.default.Class.extend({
|
|
|
60
60
|
weight: 2
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
|
-
initialize: function (options) {
|
|
63
|
+
initialize: function initialize(options) {
|
|
64
64
|
_leaflet.default.Util.setOptions(this, options);
|
|
65
65
|
this.options.pathOptions.clickable = false;
|
|
66
66
|
},
|
|
67
|
-
buildSymbol: function (dirPoint, latLngs, map, index, total) {
|
|
67
|
+
buildSymbol: function buildSymbol(dirPoint, latLngs, map, index, total) {
|
|
68
68
|
return this.options.polygon ? _leaflet.default.polygon(this._buildArrowPath(dirPoint, map), this.options.pathOptions) : _leaflet.default.polyline(this._buildArrowPath(dirPoint, map), this.options.pathOptions);
|
|
69
69
|
},
|
|
70
|
-
_buildArrowPath: function (dirPoint, map) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
70
|
+
_buildArrowPath: function _buildArrowPath(dirPoint, map) {
|
|
71
|
+
var d2r = Math.PI / 180;
|
|
72
|
+
var tipPoint = map.project(dirPoint.latLng);
|
|
73
|
+
var direction = -(dirPoint.heading - 90) * d2r;
|
|
74
|
+
var radianArrowAngle = this.options.headAngle / 2 * d2r;
|
|
75
|
+
var headAngle1 = direction + radianArrowAngle;
|
|
76
|
+
var headAngle2 = direction - radianArrowAngle;
|
|
77
|
+
var arrowHead1 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle1), tipPoint.y + this.options.pixelSize * Math.sin(headAngle1));
|
|
78
|
+
var arrowHead2 = _leaflet.default.point(tipPoint.x - this.options.pixelSize * Math.cos(headAngle2), tipPoint.y + this.options.pixelSize * Math.sin(headAngle2));
|
|
79
79
|
return [map.unproject(arrowHead1), dirPoint.latLng, map.unproject(arrowHead2)];
|
|
80
80
|
}
|
|
81
81
|
});
|
|
@@ -87,12 +87,12 @@ _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
|
|
|
87
87
|
markerOptions: {},
|
|
88
88
|
rotate: false
|
|
89
89
|
},
|
|
90
|
-
initialize: function (options) {
|
|
90
|
+
initialize: function initialize(options) {
|
|
91
91
|
_leaflet.default.Util.setOptions(this, options);
|
|
92
92
|
this.options.markerOptions.clickable = false;
|
|
93
93
|
this.options.markerOptions.draggable = false;
|
|
94
94
|
},
|
|
95
|
-
buildSymbol: function (directionPoint, latLngs, map, index, total) {
|
|
95
|
+
buildSymbol: function buildSymbol(directionPoint, latLngs, map, index, total) {
|
|
96
96
|
if (this.options.rotate) {
|
|
97
97
|
this.options.markerOptions.rotationAngle = directionPoint.heading + (this.options.angleCorrection || 0);
|
|
98
98
|
}
|
|
@@ -102,13 +102,17 @@ _leaflet.default.Symbol.Marker = _leaflet.default.Class.extend({
|
|
|
102
102
|
_leaflet.default.Symbol.marker = function (options) {
|
|
103
103
|
return new _leaflet.default.Symbol.Marker(options);
|
|
104
104
|
};
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
var isCoord = function isCoord(c) {
|
|
106
|
+
return c instanceof _leaflet.default.LatLng || Array.isArray(c) && c.length === 2 && typeof c[0] === 'number';
|
|
107
|
+
};
|
|
108
|
+
var isCoordArray = function isCoordArray(ll) {
|
|
109
|
+
return Array.isArray(ll) && isCoord(ll[0]);
|
|
110
|
+
};
|
|
107
111
|
_leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
108
112
|
options: {
|
|
109
113
|
patterns: []
|
|
110
114
|
},
|
|
111
|
-
initialize: function (paths, options) {
|
|
115
|
+
initialize: function initialize(paths, options) {
|
|
112
116
|
_leaflet.default.FeatureGroup.prototype.initialize.call(this);
|
|
113
117
|
_leaflet.default.Util.setOptions(this, options);
|
|
114
118
|
this._map = null;
|
|
@@ -121,10 +125,11 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
121
125
|
* array of LatLng, array of 2-number arrays, Polyline, Polygon,
|
|
122
126
|
* array of one of the previous.
|
|
123
127
|
*/
|
|
124
|
-
_initPaths: function (input, isPolygon) {
|
|
128
|
+
_initPaths: function _initPaths(input, isPolygon) {
|
|
129
|
+
var _this = this;
|
|
125
130
|
if (isCoordArray(input)) {
|
|
126
131
|
// Leaflet Polygons don't need the first point to be repeated, but we do
|
|
127
|
-
|
|
132
|
+
var coords = isPolygon ? input.concat([input[0]]) : input;
|
|
128
133
|
return [coords];
|
|
129
134
|
}
|
|
130
135
|
if (input instanceof _leaflet.default.Polyline) {
|
|
@@ -133,19 +138,21 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
133
138
|
}
|
|
134
139
|
if (Array.isArray(input)) {
|
|
135
140
|
// flatten everything, we just need coordinate lists to apply patterns
|
|
136
|
-
return input.reduce((flatArray, p)
|
|
141
|
+
return input.reduce(function (flatArray, p) {
|
|
142
|
+
return flatArray.concat(_this._initPaths(p, isPolygon));
|
|
143
|
+
}, []);
|
|
137
144
|
}
|
|
138
145
|
return [];
|
|
139
146
|
},
|
|
140
147
|
// parse pattern definitions and precompute some values
|
|
141
|
-
_initPatterns: function (patternDefs) {
|
|
148
|
+
_initPatterns: function _initPatterns(patternDefs) {
|
|
142
149
|
return patternDefs.map(this._parsePatternDef);
|
|
143
150
|
},
|
|
144
151
|
/**
|
|
145
152
|
* Changes the patterns used by this decorator
|
|
146
153
|
* and redraws the new one.
|
|
147
154
|
*/
|
|
148
|
-
setPatterns: function (patterns) {
|
|
155
|
+
setPatterns: function setPatterns(patterns) {
|
|
149
156
|
this.options.patterns = patterns;
|
|
150
157
|
this._patterns = this._initPatterns(this.options.patterns);
|
|
151
158
|
this.redraw();
|
|
@@ -154,7 +161,7 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
154
161
|
* Changes the patterns used by this decorator
|
|
155
162
|
* and redraws the new one.
|
|
156
163
|
*/
|
|
157
|
-
setPaths: function (paths) {
|
|
164
|
+
setPaths: function setPaths(paths) {
|
|
158
165
|
this._paths = this._initPaths(paths);
|
|
159
166
|
this._bounds = this._initBounds();
|
|
160
167
|
this.redraw();
|
|
@@ -162,7 +169,7 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
162
169
|
/**
|
|
163
170
|
* Parse the pattern definition
|
|
164
171
|
*/
|
|
165
|
-
_parsePatternDef: function (patternDef, latLngs) {
|
|
172
|
+
_parsePatternDef: function _parsePatternDef(patternDef, latLngs) {
|
|
166
173
|
return {
|
|
167
174
|
symbolFactory: patternDef.symbol,
|
|
168
175
|
// Parse offset and repeat values, managing the two cases:
|
|
@@ -172,12 +179,12 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
172
179
|
repeat: parseRelativeOrAbsoluteValue(patternDef.repeat)
|
|
173
180
|
};
|
|
174
181
|
},
|
|
175
|
-
onAdd: function (map) {
|
|
182
|
+
onAdd: function onAdd(map) {
|
|
176
183
|
this._map = map;
|
|
177
184
|
this._draw();
|
|
178
185
|
this._map.on('moveend', this.redraw, this);
|
|
179
186
|
},
|
|
180
|
-
onRemove: function (map) {
|
|
187
|
+
onRemove: function onRemove(map) {
|
|
181
188
|
this._map.off('moveend', this.redraw, this);
|
|
182
189
|
this._map = null;
|
|
183
190
|
_leaflet.default.FeatureGroup.prototype.onRemove.call(this, map);
|
|
@@ -186,34 +193,44 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
186
193
|
* As real pattern bounds depends on map zoom and bounds,
|
|
187
194
|
* we just compute the total bounds of all paths decorated by this instance.
|
|
188
195
|
*/
|
|
189
|
-
_initBounds: function () {
|
|
190
|
-
|
|
196
|
+
_initBounds: function _initBounds() {
|
|
197
|
+
var allPathCoords = this._paths.reduce(function (acc, path) {
|
|
198
|
+
return acc.concat(path);
|
|
199
|
+
}, []);
|
|
191
200
|
return _leaflet.default.latLngBounds(allPathCoords);
|
|
192
201
|
},
|
|
193
|
-
getBounds: function () {
|
|
202
|
+
getBounds: function getBounds() {
|
|
194
203
|
return this._bounds;
|
|
195
204
|
},
|
|
196
205
|
/**
|
|
197
206
|
* Returns an array of ILayers object
|
|
198
207
|
*/
|
|
199
|
-
_buildSymbols: function (latLngs, symbolFactory, directionPoints) {
|
|
200
|
-
|
|
208
|
+
_buildSymbols: function _buildSymbols(latLngs, symbolFactory, directionPoints) {
|
|
209
|
+
var _this2 = this;
|
|
210
|
+
return directionPoints.map(function (directionPoint, i) {
|
|
211
|
+
return symbolFactory.buildSymbol(directionPoint, latLngs, _this2._map, i, directionPoints.length);
|
|
212
|
+
});
|
|
201
213
|
},
|
|
202
214
|
/**
|
|
203
215
|
* Compute pairs of LatLng and heading angle,
|
|
204
216
|
* that define positions and directions of the symbols on the path
|
|
205
217
|
*/
|
|
206
|
-
_getDirectionPoints: function (latLngs, pattern) {
|
|
218
|
+
_getDirectionPoints: function _getDirectionPoints(latLngs, pattern) {
|
|
219
|
+
var _this3 = this;
|
|
207
220
|
if (latLngs.length < 2) {
|
|
208
221
|
return [];
|
|
209
222
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
223
|
+
var pathAsPoints = latLngs.map(function (latLng) {
|
|
224
|
+
return _this3._map.project(latLng);
|
|
225
|
+
});
|
|
226
|
+
return projectPatternOnPointPath(pathAsPoints, pattern).map(function (point) {
|
|
227
|
+
return {
|
|
228
|
+
latLng: _this3._map.unproject(_leaflet.default.point(point.pt)),
|
|
229
|
+
heading: point.heading
|
|
230
|
+
};
|
|
231
|
+
});
|
|
215
232
|
},
|
|
216
|
-
redraw: function () {
|
|
233
|
+
redraw: function redraw() {
|
|
217
234
|
if (!this._map) {
|
|
218
235
|
return;
|
|
219
236
|
}
|
|
@@ -223,21 +240,27 @@ _leaflet.default.PolylineDecorator = _leaflet.default.FeatureGroup.extend({
|
|
|
223
240
|
/**
|
|
224
241
|
* Returns all symbols for a given pattern as an array of FeatureGroup
|
|
225
242
|
*/
|
|
226
|
-
_getPatternLayers: function (pattern) {
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
243
|
+
_getPatternLayers: function _getPatternLayers(pattern) {
|
|
244
|
+
var _this4 = this;
|
|
245
|
+
var mapBounds = this._map.getBounds().pad(0.1);
|
|
246
|
+
return this._paths.map(function (path) {
|
|
247
|
+
var directionPoints = _this4._getDirectionPoints(path, pattern)
|
|
230
248
|
// filter out invisible points
|
|
231
|
-
.filter(
|
|
232
|
-
|
|
249
|
+
.filter(function (point) {
|
|
250
|
+
return mapBounds.contains(point.latLng);
|
|
251
|
+
});
|
|
252
|
+
return _leaflet.default.featureGroup(_this4._buildSymbols(path, pattern.symbolFactory, directionPoints));
|
|
233
253
|
});
|
|
234
254
|
},
|
|
235
255
|
/**
|
|
236
256
|
* Draw all patterns
|
|
237
257
|
*/
|
|
238
|
-
_draw: function () {
|
|
239
|
-
|
|
240
|
-
|
|
258
|
+
_draw: function _draw() {
|
|
259
|
+
var _this5 = this;
|
|
260
|
+
this._patterns.map(function (pattern) {
|
|
261
|
+
return _this5._getPatternLayers(pattern);
|
|
262
|
+
}).forEach(function (layers) {
|
|
263
|
+
_this5.addLayer(_leaflet.default.featureGroup(layers));
|
|
241
264
|
});
|
|
242
265
|
}
|
|
243
266
|
});
|
|
@@ -251,17 +274,17 @@ _leaflet.default.polylineDecorator = function (paths, options) {
|
|
|
251
274
|
// functional re-impl of L.Point.distanceTo,
|
|
252
275
|
// with no dependency on Leaflet for easier testing
|
|
253
276
|
function pointDistance(ptA, ptB) {
|
|
254
|
-
|
|
255
|
-
|
|
277
|
+
var x = ptB.x - ptA.x;
|
|
278
|
+
var y = ptB.y - ptA.y;
|
|
256
279
|
return Math.sqrt(x * x + y * y);
|
|
257
280
|
}
|
|
258
|
-
|
|
281
|
+
var computeSegmentHeading = function computeSegmentHeading(a, b) {
|
|
282
|
+
return (Math.atan2(b.y - a.y, b.x - a.x) * 180 / Math.PI + 90 + 360) % 360;
|
|
283
|
+
};
|
|
259
284
|
exports.computeSegmentHeading = computeSegmentHeading;
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
isInPixels
|
|
264
|
-
} = _ref;
|
|
285
|
+
var asRatioToPathLength = function asRatioToPathLength(_ref, totalPathLength) {
|
|
286
|
+
var value = _ref.value,
|
|
287
|
+
isInPixels = _ref.isInPixels;
|
|
265
288
|
return isInPixels ? value / totalPathLength : value;
|
|
266
289
|
};
|
|
267
290
|
exports.asRatioToPathLength = asRatioToPathLength;
|
|
@@ -272,24 +295,26 @@ function parseRelativeOrAbsoluteValue(value) {
|
|
|
272
295
|
isInPixels: false
|
|
273
296
|
};
|
|
274
297
|
}
|
|
275
|
-
|
|
298
|
+
var parsedValue = value ? parseFloat(value) : 0;
|
|
276
299
|
return {
|
|
277
300
|
value: parsedValue,
|
|
278
301
|
isInPixels: parsedValue > 0
|
|
279
302
|
};
|
|
280
303
|
}
|
|
281
|
-
|
|
304
|
+
var pointsEqual = function pointsEqual(a, b) {
|
|
305
|
+
return a.x === b.x && a.y === b.y;
|
|
306
|
+
};
|
|
282
307
|
function pointsToSegments(pts) {
|
|
283
|
-
return pts.reduce((segments, b, idx, points)
|
|
308
|
+
return pts.reduce(function (segments, b, idx, points) {
|
|
284
309
|
// this test skips same adjacent points
|
|
285
310
|
if (idx > 0 && !pointsEqual(b, points[idx - 1])) {
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
311
|
+
var a = points[idx - 1];
|
|
312
|
+
var distA = segments.length > 0 ? segments[segments.length - 1].distB : 0;
|
|
313
|
+
var distAB = pointDistance(a, b);
|
|
289
314
|
segments.push({
|
|
290
|
-
a,
|
|
291
|
-
b,
|
|
292
|
-
distA,
|
|
315
|
+
a: a,
|
|
316
|
+
b: b,
|
|
317
|
+
distA: distA,
|
|
293
318
|
distB: distA + distAB,
|
|
294
319
|
heading: computeSegmentHeading(a, b)
|
|
295
320
|
});
|
|
@@ -299,38 +324,38 @@ function pointsToSegments(pts) {
|
|
|
299
324
|
}
|
|
300
325
|
function projectPatternOnPointPath(pts, pattern) {
|
|
301
326
|
// 1. split the path into segment infos
|
|
302
|
-
|
|
303
|
-
|
|
327
|
+
var segments = pointsToSegments(pts);
|
|
328
|
+
var nbSegments = segments.length;
|
|
304
329
|
if (nbSegments === 0) {
|
|
305
330
|
return [];
|
|
306
331
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
332
|
+
var totalPathLength = segments[nbSegments - 1].distB;
|
|
333
|
+
var offset = asRatioToPathLength(pattern.offset, totalPathLength);
|
|
334
|
+
var endOffset = asRatioToPathLength(pattern.endOffset, totalPathLength);
|
|
335
|
+
var repeat = asRatioToPathLength(pattern.repeat, totalPathLength);
|
|
336
|
+
var repeatIntervalPixels = totalPathLength * repeat;
|
|
337
|
+
var startOffsetPixels = offset > 0 ? totalPathLength * offset : 0;
|
|
338
|
+
var endOffsetPixels = endOffset > 0 ? totalPathLength * endOffset : 0;
|
|
314
339
|
|
|
315
340
|
// 2. generate the positions of the pattern as offsets from the path start
|
|
316
|
-
|
|
317
|
-
|
|
341
|
+
var positionOffsets = [];
|
|
342
|
+
var positionOffset = startOffsetPixels;
|
|
318
343
|
do {
|
|
319
344
|
positionOffsets.push(positionOffset);
|
|
320
345
|
positionOffset += repeatIntervalPixels;
|
|
321
346
|
} while (repeatIntervalPixels > 0 && positionOffset < totalPathLength - endOffsetPixels);
|
|
322
347
|
|
|
323
348
|
// 3. projects offsets to segments
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
return positionOffsets.map(positionOffset
|
|
349
|
+
var segmentIndex = 0;
|
|
350
|
+
var segment = segments[0];
|
|
351
|
+
return positionOffsets.map(function (positionOffset) {
|
|
327
352
|
// find the segment matching the offset,
|
|
328
353
|
// starting from the previous one as offsets are ordered
|
|
329
354
|
while (positionOffset > segment.distB && segmentIndex < nbSegments - 1) {
|
|
330
355
|
segmentIndex++;
|
|
331
356
|
segment = segments[segmentIndex];
|
|
332
357
|
}
|
|
333
|
-
|
|
358
|
+
var segmentRatio = (positionOffset - segment.distA) / (segment.distB - segment.distA);
|
|
334
359
|
return {
|
|
335
360
|
pt: interpolateBetweenPoints(segment.a, segment.b, segmentRatio),
|
|
336
361
|
heading: segment.heading
|
|
@@ -358,4 +383,4 @@ function interpolateBetweenPoints(ptA, ptB, ratio) {
|
|
|
358
383
|
window.L = _leaflet.default;
|
|
359
384
|
window.L.polylineDecorator = _leaflet.default.polylineDecorator;
|
|
360
385
|
window.L.Symbol = _leaflet.default.Symbol;
|
|
361
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJjb29yZHMiLCJjb25jYXQiLCJQb2x5bGluZSIsImdldExhdExuZ3MiLCJQb2x5Z29uIiwicmVkdWNlIiwiZmxhdEFycmF5IiwicCIsInBhdHRlcm5EZWZzIiwiX3BhcnNlUGF0dGVybkRlZiIsInNldFBhdHRlcm5zIiwicmVkcmF3Iiwic2V0UGF0aHMiLCJwYXR0ZXJuRGVmIiwic3ltYm9sRmFjdG9yeSIsInN5bWJvbCIsIm9mZnNldCIsInBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUiLCJlbmRPZmZzZXQiLCJyZXBlYXQiLCJvbkFkZCIsIl9kcmF3Iiwib24iLCJvblJlbW92ZSIsIm9mZiIsImFsbFBhdGhDb29yZHMiLCJhY2MiLCJwYXRoIiwibGF0TG5nQm91bmRzIiwiZ2V0Qm91bmRzIiwiX2J1aWxkU3ltYm9scyIsImRpcmVjdGlvblBvaW50cyIsImkiLCJfZ2V0RGlyZWN0aW9uUG9pbnRzIiwicGF0dGVybiIsInBhdGhBc1BvaW50cyIsInByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgiLCJwdCIsImNsZWFyTGF5ZXJzIiwiX2dldFBhdHRlcm5MYXllcnMiLCJtYXBCb3VuZHMiLCJwYWQiLCJmaWx0ZXIiLCJjb250YWlucyIsImZlYXR1cmVHcm91cCIsImZvckVhY2giLCJsYXllcnMiLCJhZGRMYXllciIsInBvbHlsaW5lRGVjb3JhdG9yIiwicG9pbnREaXN0YW5jZSIsInB0QSIsInB0QiIsInNxcnQiLCJjb21wdXRlU2VnbWVudEhlYWRpbmciLCJhdGFuMiIsImV4cG9ydHMiLCJhc1JhdGlvVG9QYXRoTGVuZ3RoIiwiX3JlZiIsInRvdGFsUGF0aExlbmd0aCIsInZhbHVlIiwiaXNJblBpeGVscyIsImluZGV4T2YiLCJwYXJzZUZsb2F0IiwicGFyc2VkVmFsdWUiLCJwb2ludHNFcXVhbCIsInBvaW50c1RvU2VnbWVudHMiLCJwdHMiLCJzZWdtZW50cyIsImlkeCIsInBvaW50cyIsImRpc3RBIiwiZGlzdEIiLCJkaXN0QUIiLCJwdXNoIiwibmJTZWdtZW50cyIsInJlcGVhdEludGVydmFsUGl4ZWxzIiwic3RhcnRPZmZzZXRQaXhlbHMiLCJlbmRPZmZzZXRQaXhlbHMiLCJwb3NpdGlvbk9mZnNldHMiLCJwb3NpdGlvbk9mZnNldCIsInNlZ21lbnRJbmRleCIsInNlZ21lbnQiLCJzZWdtZW50UmF0aW8iLCJpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMiLCJyYXRpbyIsIndpbmRvdyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcG9seWxpbmVkZWNvcmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEwgZnJvbSAnbGVhZmxldCc7XG4vLyBlbmFibGUgcm90YXRpb25BbmdsZSBhbmQgcm90YXRpb25PcmlnaW4gc3VwcG9ydCBvbiBMLk1hcmtlclxuaW1wb3J0ICdsZWFmbGV0LXJvdGF0ZWRtYXJrZXInO1xuXG4vKipcbiAqIERlZmluZXMgc2V2ZXJhbCBjbGFzc2VzIG9mIHN5bWJvbCBmYWN0b3JpZXMsXG4gKiB0byBiZSB1c2VkIHdpdGggTC5Qb2x5bGluZURlY29yYXRvclxuICovXG5cbkwuU3ltYm9sID0gTC5TeW1ib2wgfHwge307XG5cbi8qKlxuICogQSBzaW1wbGUgZGFzaCBzeW1ib2wsIGRyYXduIGFzIGEgUG9seWxpbmUuXG4gKiBDYW4gYWxzbyBiZSB1c2VkIGZvciBkb3RzLCBpZiAncGl4ZWxTaXplJyBvcHRpb24gaXMgZ2l2ZW4gdGhlIDAgdmFsdWUuXG4gKi9cbkwuU3ltYm9sLkRhc2ggPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwaXhlbFNpemU6IDEwLFxuICAgIHBhdGhPcHRpb25zOiB7fSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpclBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcblxuICAgIC8vIGZvciBhIGRvdCwgbm90aGluZyBtb3JlIHRvIGNvbXB1dGVcbiAgICBpZiAob3B0cy5waXhlbFNpemUgPD0gMSkge1xuICAgICAgcmV0dXJuIEwucG9seWxpbmUoW2RpclBvaW50LmxhdExuZywgZGlyUG9pbnQubGF0TG5nXSwgb3B0cy5wYXRoT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWlkUG9pbnQgPSBtYXAucHJvamVjdChkaXJQb2ludC5sYXRMbmcpO1xuICAgIGNvbnN0IGFuZ2xlID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IGEgPSBMLnBvaW50KFxuICAgICAgbWlkUG9pbnQueCArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguY29zKGFuZ2xlICsgTWF0aC5QSSkpIC8gMixcbiAgICAgIG1pZFBvaW50LnkgKyAob3B0cy5waXhlbFNpemUgKiBNYXRoLnNpbihhbmdsZSkpIC8gMixcbiAgICApO1xuICAgIC8vIGNvbXB1dGUgc2Vjb25kIHBvaW50IGJ5IGNlbnRyYWwgc3ltbWV0cnkgdG8gYXZvaWQgdW5lY2Vzc2FyeSBjb3Mvc2luXG4gICAgY29uc3QgYiA9IG1pZFBvaW50LmFkZChtaWRQb2ludC5zdWJ0cmFjdChhKSk7XG4gICAgcmV0dXJuIEwucG9seWxpbmUoW21hcC51bnByb2plY3QoYSksIG1hcC51bnByb2plY3QoYildLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5kYXNoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBMLlN5bWJvbC5EYXNoKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuQXJyb3dIZWFkID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcG9seWdvbjogdHJ1ZSxcbiAgICBwaXhlbFNpemU6IDEwLFxuICAgIGhlYWRBbmdsZTogNjAsXG4gICAgcGF0aE9wdGlvbnM6IHtcbiAgICAgIHN0cm9rZTogZmFsc2UsXG4gICAgICB3ZWlnaHQ6IDIsXG4gICAgfSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpclBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMucG9seWdvblxuICAgICAgPyBMLnBvbHlnb24odGhpcy5fYnVpbGRBcnJvd1BhdGgoZGlyUG9pbnQsIG1hcCksIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucylcbiAgICAgIDogTC5wb2x5bGluZShcbiAgICAgICAgICB0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSxcbiAgICAgICAgICB0aGlzLm9wdGlvbnMucGF0aE9wdGlvbnMsXG4gICAgICAgICk7XG4gIH0sXG5cbiAgX2J1aWxkQXJyb3dQYXRoOiBmdW5jdGlvbiAoZGlyUG9pbnQsIG1hcCkge1xuICAgIGNvbnN0IGQyciA9IE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgdGlwUG9pbnQgPSBtYXAucHJvamVjdChkaXJQb2ludC5sYXRMbmcpO1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IC0oZGlyUG9pbnQuaGVhZGluZyAtIDkwKSAqIGQycjtcbiAgICBjb25zdCByYWRpYW5BcnJvd0FuZ2xlID0gKHRoaXMub3B0aW9ucy5oZWFkQW5nbGUgLyAyKSAqIGQycjtcblxuICAgIGNvbnN0IGhlYWRBbmdsZTEgPSBkaXJlY3Rpb24gKyByYWRpYW5BcnJvd0FuZ2xlO1xuICAgIGNvbnN0IGhlYWRBbmdsZTIgPSBkaXJlY3Rpb24gLSByYWRpYW5BcnJvd0FuZ2xlO1xuICAgIGNvbnN0IGFycm93SGVhZDEgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUxKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMSksXG4gICAgKTtcbiAgICBjb25zdCBhcnJvd0hlYWQyID0gTC5wb2ludChcbiAgICAgIHRpcFBvaW50LnggLSB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5jb3MoaGVhZEFuZ2xlMiksXG4gICAgICB0aXBQb2ludC55ICsgdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguc2luKGhlYWRBbmdsZTIpLFxuICAgICk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQxKSxcbiAgICAgIGRpclBvaW50LmxhdExuZyxcbiAgICAgIG1hcC51bnByb2plY3QoYXJyb3dIZWFkMiksXG4gICAgXTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5hcnJvd0hlYWQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkFycm93SGVhZChvcHRpb25zKTtcbn07XG5cbkwuU3ltYm9sLk1hcmtlciA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIG1hcmtlck9wdGlvbnM6IHt9LFxuICAgIHJvdGF0ZTogZmFsc2UsXG4gIH0sXG5cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBMLlV0aWwuc2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5jbGlja2FibGUgPSBmYWxzZTtcbiAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgfSxcblxuICBidWlsZFN5bWJvbDogZnVuY3Rpb24gKGRpcmVjdGlvblBvaW50LCBsYXRMbmdzLCBtYXAsIGluZGV4LCB0b3RhbCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMucm90YXRlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucy5yb3RhdGlvbkFuZ2xlID1cbiAgICAgICAgZGlyZWN0aW9uUG9pbnQuaGVhZGluZyArICh0aGlzLm9wdGlvbnMuYW5nbGVDb3JyZWN0aW9uIHx8IDApO1xuICAgIH1cbiAgICByZXR1cm4gTC5tYXJrZXIoZGlyZWN0aW9uUG9pbnQubGF0TG5nLCB0aGlzLm9wdGlvbnMubWFya2VyT3B0aW9ucyk7XG4gIH0sXG59KTtcblxuTC5TeW1ib2wubWFya2VyID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBMLlN5bWJvbC5NYXJrZXIob3B0aW9ucyk7XG59O1xuXG5jb25zdCBpc0Nvb3JkID0gKGMpID0+XG4gIGMgaW5zdGFuY2VvZiBMLkxhdExuZyB8fFxuICAoQXJyYXkuaXNBcnJheShjKSAmJiBjLmxlbmd0aCA9PT0gMiAmJiB0eXBlb2YgY1swXSA9PT0gJ251bWJlcicpO1xuXG5jb25zdCBpc0Nvb3JkQXJyYXkgPSAobGwpID0+IEFycmF5LmlzQXJyYXkobGwpICYmIGlzQ29vcmQobGxbMF0pO1xuXG5MLlBvbHlsaW5lRGVjb3JhdG9yID0gTC5GZWF0dXJlR3JvdXAuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBhdHRlcm5zOiBbXSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAocGF0aHMsIG9wdGlvbnMpIHtcbiAgICBMLkZlYXR1cmVHcm91cC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMpO1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMuX21hcCA9IG51bGw7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWFscyB3aXRoIGFsbCB0aGUgZGlmZmVyZW50IGNhc2VzLiBpbnB1dCBjYW4gYmUgb25lIG9mIHRoZXNlIHR5cGVzOlxuICAgKiBhcnJheSBvZiBMYXRMbmcsIGFycmF5IG9mIDItbnVtYmVyIGFycmF5cywgUG9seWxpbmUsIFBvbHlnb24sXG4gICAqIGFycmF5IG9mIG9uZSBvZiB0aGUgcHJldmlvdXMuXG4gICAqL1xuICBfaW5pdFBhdGhzOiBmdW5jdGlvbiAoaW5wdXQsIGlzUG9seWdvbikge1xuICAgIGlmIChpc0Nvb3JkQXJyYXkoaW5wdXQpKSB7XG4gICAgICAvLyBMZWFmbGV0IFBvbHlnb25zIGRvbid0IG5lZWQgdGhlIGZpcnN0IHBvaW50IHRvIGJlIHJlcGVhdGVkLCBidXQgd2UgZG9cbiAgICAgIGNvbnN0IGNvb3JkcyA9IGlzUG9seWdvbiA/IGlucHV0LmNvbmNhdChbaW5wdXRbMF1dKSA6IGlucHV0O1xuICAgICAgcmV0dXJuIFtjb29yZHNdO1xuICAgIH1cbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlsaW5lKSB7XG4gICAgICAvLyB3ZSBuZWVkIHNvbWUgcmVjdXJzaXZpdHkgdG8gc3VwcG9ydCBtdWx0aS1wb2x5KlxuICAgICAgcmV0dXJuIHRoaXMuX2luaXRQYXRocyhpbnB1dC5nZXRMYXRMbmdzKCksIGlucHV0IGluc3RhbmNlb2YgTC5Qb2x5Z29uKTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAvLyBmbGF0dGVuIGV2ZXJ5dGhpbmcsIHdlIGp1c3QgbmVlZCBjb29yZGluYXRlIGxpc3RzIHRvIGFwcGx5IHBhdHRlcm5zXG4gICAgICByZXR1cm4gaW5wdXQucmVkdWNlKFxuICAgICAgICAoZmxhdEFycmF5LCBwKSA9PiBmbGF0QXJyYXkuY29uY2F0KHRoaXMuX2luaXRQYXRocyhwLCBpc1BvbHlnb24pKSxcbiAgICAgICAgW10sXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH0sXG5cbiAgLy8gcGFyc2UgcGF0dGVybiBkZWZpbml0aW9ucyBhbmQgcHJlY29tcHV0ZSBzb21lIHZhbHVlc1xuICBfaW5pdFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybkRlZnMpIHtcbiAgICByZXR1cm4gcGF0dGVybkRlZnMubWFwKHRoaXMuX3BhcnNlUGF0dGVybkRlZik7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXR0ZXJuczogZnVuY3Rpb24gKHBhdHRlcm5zKSB7XG4gICAgdGhpcy5vcHRpb25zLnBhdHRlcm5zID0gcGF0dGVybnM7XG4gICAgdGhpcy5fcGF0dGVybnMgPSB0aGlzLl9pbml0UGF0dGVybnModGhpcy5vcHRpb25zLnBhdHRlcm5zKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGFuZ2VzIHRoZSBwYXR0ZXJucyB1c2VkIGJ5IHRoaXMgZGVjb3JhdG9yXG4gICAqIGFuZCByZWRyYXdzIHRoZSBuZXcgb25lLlxuICAgKi9cbiAgc2V0UGF0aHM6IGZ1bmN0aW9uIChwYXRocykge1xuICAgIHRoaXMuX3BhdGhzID0gdGhpcy5faW5pdFBhdGhzKHBhdGhzKTtcbiAgICB0aGlzLl9ib3VuZHMgPSB0aGlzLl9pbml0Qm91bmRzKCk7XG4gICAgdGhpcy5yZWRyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUGFyc2UgdGhlIHBhdHRlcm4gZGVmaW5pdGlvblxuICAgKi9cbiAgX3BhcnNlUGF0dGVybkRlZjogZnVuY3Rpb24gKHBhdHRlcm5EZWYsIGxhdExuZ3MpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3ltYm9sRmFjdG9yeTogcGF0dGVybkRlZi5zeW1ib2wsXG4gICAgICAvLyBQYXJzZSBvZmZzZXQgYW5kIHJlcGVhdCB2YWx1ZXMsIG1hbmFnaW5nIHRoZSB0d28gY2FzZXM6XG4gICAgICAvLyBhYnNvbHV0ZSAoaW4gcGl4ZWxzKSBvciByZWxhdGl2ZSAoaW4gcGVyY2VudGFnZSBvZiB0aGUgcG9seWxpbmUgbGVuZ3RoKVxuICAgICAgb2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYub2Zmc2V0KSxcbiAgICAgIGVuZE9mZnNldDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLmVuZE9mZnNldCksXG4gICAgICByZXBlYXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5yZXBlYXQpLFxuICAgIH07XG4gIH0sXG5cbiAgb25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcbiAgICB0aGlzLl9tYXAgPSBtYXA7XG4gICAgdGhpcy5fZHJhdygpO1xuICAgIHRoaXMuX21hcC5vbignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgfSxcblxuICBvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcC5vZmYoJ21vdmVlbmQnLCB0aGlzLnJlZHJhdywgdGhpcyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICBMLkZlYXR1cmVHcm91cC5wcm90b3R5cGUub25SZW1vdmUuY2FsbCh0aGlzLCBtYXApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBcyByZWFsIHBhdHRlcm4gYm91bmRzIGRlcGVuZHMgb24gbWFwIHpvb20gYW5kIGJvdW5kcyxcbiAgICogd2UganVzdCBjb21wdXRlIHRoZSB0b3RhbCBib3VuZHMgb2YgYWxsIHBhdGhzIGRlY29yYXRlZCBieSB0aGlzIGluc3RhbmNlLlxuICAgKi9cbiAgX2luaXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBhbGxQYXRoQ29vcmRzID0gdGhpcy5fcGF0aHMucmVkdWNlKFxuICAgICAgKGFjYywgcGF0aCkgPT4gYWNjLmNvbmNhdChwYXRoKSxcbiAgICAgIFtdLFxuICAgICk7XG4gICAgcmV0dXJuIEwubGF0TG5nQm91bmRzKGFsbFBhdGhDb29yZHMpO1xuICB9LFxuXG4gIGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9ib3VuZHM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgSUxheWVycyBvYmplY3RcbiAgICovXG4gIF9idWlsZFN5bWJvbHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBzeW1ib2xGYWN0b3J5LCBkaXJlY3Rpb25Qb2ludHMpIHtcbiAgICByZXR1cm4gZGlyZWN0aW9uUG9pbnRzLm1hcCgoZGlyZWN0aW9uUG9pbnQsIGkpID0+XG4gICAgICBzeW1ib2xGYWN0b3J5LmJ1aWxkU3ltYm9sKFxuICAgICAgICBkaXJlY3Rpb25Qb2ludCxcbiAgICAgICAgbGF0TG5ncyxcbiAgICAgICAgdGhpcy5fbWFwLFxuICAgICAgICBpLFxuICAgICAgICBkaXJlY3Rpb25Qb2ludHMubGVuZ3RoLFxuICAgICAgKSxcbiAgICApO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHBhaXJzIG9mIExhdExuZyBhbmQgaGVhZGluZyBhbmdsZSxcbiAgICogdGhhdCBkZWZpbmUgcG9zaXRpb25zIGFuZCBkaXJlY3Rpb25zIG9mIHRoZSBzeW1ib2xzIG9uIHRoZSBwYXRoXG4gICAqL1xuICBfZ2V0RGlyZWN0aW9uUG9pbnRzOiBmdW5jdGlvbiAobGF0TG5ncywgcGF0dGVybikge1xuICAgIGlmIChsYXRMbmdzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgcGF0aEFzUG9pbnRzID0gbGF0TG5ncy5tYXAoKGxhdExuZykgPT4gdGhpcy5fbWFwLnByb2plY3QobGF0TG5nKSk7XG4gICAgcmV0dXJuIHByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgocGF0aEFzUG9pbnRzLCBwYXR0ZXJuKS5tYXAoKHBvaW50KSA9PiAoe1xuICAgICAgbGF0TG5nOiB0aGlzLl9tYXAudW5wcm9qZWN0KEwucG9pbnQocG9pbnQucHQpKSxcbiAgICAgIGhlYWRpbmc6IHBvaW50LmhlYWRpbmcsXG4gICAgfSkpO1xuICB9LFxuXG4gIHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIGlmICghdGhpcy5fbWFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY2xlYXJMYXllcnMoKTtcbiAgICB0aGlzLl9kcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJldHVybnMgYWxsIHN5bWJvbHMgZm9yIGEgZ2l2ZW4gcGF0dGVybiBhcyBhbiBhcnJheSBvZiBGZWF0dXJlR3JvdXBcbiAgICovXG4gIF9nZXRQYXR0ZXJuTGF5ZXJzOiBmdW5jdGlvbiAocGF0dGVybikge1xuICAgIGNvbnN0IG1hcEJvdW5kcyA9IHRoaXMuX21hcC5nZXRCb3VuZHMoKS5wYWQoMC4xKTtcbiAgICByZXR1cm4gdGhpcy5fcGF0aHMubWFwKChwYXRoKSA9PiB7XG4gICAgICBjb25zdCBkaXJlY3Rpb25Qb2ludHMgPSB0aGlzLl9nZXREaXJlY3Rpb25Qb2ludHMocGF0aCwgcGF0dGVybilcbiAgICAgICAgLy8gZmlsdGVyIG91dCBpbnZpc2libGUgcG9pbnRzXG4gICAgICAgIC5maWx0ZXIoKHBvaW50KSA9PiBtYXBCb3VuZHMuY29udGFpbnMocG9pbnQubGF0TG5nKSk7XG4gICAgICByZXR1cm4gTC5mZWF0dXJlR3JvdXAoXG4gICAgICAgIHRoaXMuX2J1aWxkU3ltYm9scyhwYXRoLCBwYXR0ZXJuLnN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cyksXG4gICAgICApO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEcmF3IGFsbCBwYXR0ZXJuc1xuICAgKi9cbiAgX2RyYXc6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9wYXR0ZXJuc1xuICAgICAgLm1hcCgocGF0dGVybikgPT4gdGhpcy5fZ2V0UGF0dGVybkxheWVycyhwYXR0ZXJuKSlcbiAgICAgIC5mb3JFYWNoKChsYXllcnMpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMYXllcihMLmZlYXR1cmVHcm91cChsYXllcnMpKTtcbiAgICAgIH0pO1xuICB9LFxufSk7XG4vKlxuICogQWxsb3dzIGNvbXBhY3Qgc3ludGF4IHRvIGJlIHVzZWRcbiAqL1xuTC5wb2x5bGluZURlY29yYXRvciA9IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuUG9seWxpbmVEZWNvcmF0b3IocGF0aHMsIG9wdGlvbnMpO1xufTtcblxuLy8gZnVuY3Rpb25hbCByZS1pbXBsIG9mIEwuUG9pbnQuZGlzdGFuY2VUbyxcbi8vIHdpdGggbm8gZGVwZW5kZW5jeSBvbiBMZWFmbGV0IGZvciBlYXNpZXIgdGVzdGluZ1xuZnVuY3Rpb24gcG9pbnREaXN0YW5jZShwdEEsIHB0Qikge1xuICBjb25zdCB4ID0gcHRCLnggLSBwdEEueDtcbiAgY29uc3QgeSA9IHB0Qi55IC0gcHRBLnk7XG4gIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG59XG5cbmNvbnN0IGNvbXB1dGVTZWdtZW50SGVhZGluZyA9IChhLCBiKSA9PlxuICAoKE1hdGguYXRhbjIoYi55IC0gYS55LCBiLnggLSBhLngpICogMTgwKSAvIE1hdGguUEkgKyA5MCArIDM2MCkgJSAzNjA7XG5cbmNvbnN0IGFzUmF0aW9Ub1BhdGhMZW5ndGggPSAoeyB2YWx1ZSwgaXNJblBpeGVscyB9LCB0b3RhbFBhdGhMZW5ndGgpID0+XG4gIGlzSW5QaXhlbHMgPyB2YWx1ZSAvIHRvdGFsUGF0aExlbmd0aCA6IHZhbHVlO1xuXG5mdW5jdGlvbiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmluZGV4T2YoJyUnKSAhPT0gLTEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IHBhcnNlRmxvYXQodmFsdWUpIC8gMTAwLFxuICAgICAgaXNJblBpeGVsczogZmFsc2UsXG4gICAgfTtcbiAgfVxuICBjb25zdCBwYXJzZWRWYWx1ZSA9IHZhbHVlID8gcGFyc2VGbG9hdCh2YWx1ZSkgOiAwO1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBwYXJzZWRWYWx1ZSxcbiAgICBpc0luUGl4ZWxzOiBwYXJzZWRWYWx1ZSA+IDAsXG4gIH07XG59XG5cbmNvbnN0IHBvaW50c0VxdWFsID0gKGEsIGIpID0+IGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55O1xuXG5mdW5jdGlvbiBwb2ludHNUb1NlZ21lbnRzKHB0cykge1xuICByZXR1cm4gcHRzLnJlZHVjZSgoc2VnbWVudHMsIGIsIGlkeCwgcG9pbnRzKSA9PiB7XG4gICAgLy8gdGhpcyB0ZXN0IHNraXBzIHNhbWUgYWRqYWNlbnQgcG9pbnRzXG4gICAgaWYgKGlkeCA+IDAgJiYgIXBvaW50c0VxdWFsKGIsIHBvaW50c1tpZHggLSAxXSkpIHtcbiAgICAgIGNvbnN0IGEgPSBwb2ludHNbaWR4IC0gMV07XG4gICAgICBjb25zdCBkaXN0QSA9XG4gICAgICAgIHNlZ21lbnRzLmxlbmd0aCA+IDAgPyBzZWdtZW50c1tzZWdtZW50cy5sZW5ndGggLSAxXS5kaXN0QiA6IDA7XG4gICAgICBjb25zdCBkaXN0QUIgPSBwb2ludERpc3RhbmNlKGEsIGIpO1xuICAgICAgc2VnbWVudHMucHVzaCh7XG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICAgIGRpc3RBLFxuICAgICAgICBkaXN0QjogZGlzdEEgKyBkaXN0QUIsXG4gICAgICAgIGhlYWRpbmc6IGNvbXB1dGVTZWdtZW50SGVhZGluZyhhLCBiKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc2VnbWVudHM7XG4gIH0sIFtdKTtcbn1cblxuZnVuY3Rpb24gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwdHMsIHBhdHRlcm4pIHtcbiAgLy8gMS4gc3BsaXQgdGhlIHBhdGggaW50byBzZWdtZW50IGluZm9zXG4gIGNvbnN0IHNlZ21lbnRzID0gcG9pbnRzVG9TZWdtZW50cyhwdHMpO1xuICBjb25zdCBuYlNlZ21lbnRzID0gc2VnbWVudHMubGVuZ3RoO1xuICBpZiAobmJTZWdtZW50cyA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHRvdGFsUGF0aExlbmd0aCA9IHNlZ21lbnRzW25iU2VnbWVudHMgLSAxXS5kaXN0QjtcblxuICBjb25zdCBvZmZzZXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4ub2Zmc2V0LCB0b3RhbFBhdGhMZW5ndGgpO1xuICBjb25zdCBlbmRPZmZzZXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4uZW5kT2Zmc2V0LCB0b3RhbFBhdGhMZW5ndGgpO1xuICBjb25zdCByZXBlYXQgPSBhc1JhdGlvVG9QYXRoTGVuZ3RoKHBhdHRlcm4ucmVwZWF0LCB0b3RhbFBhdGhMZW5ndGgpO1xuXG4gIGNvbnN0IHJlcGVhdEludGVydmFsUGl4ZWxzID0gdG90YWxQYXRoTGVuZ3RoICogcmVwZWF0O1xuICBjb25zdCBzdGFydE9mZnNldFBpeGVscyA9IG9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBvZmZzZXQgOiAwO1xuICBjb25zdCBlbmRPZmZzZXRQaXhlbHMgPSBlbmRPZmZzZXQgPiAwID8gdG90YWxQYXRoTGVuZ3RoICogZW5kT2Zmc2V0IDogMDtcblxuICAvLyAyLiBnZW5lcmF0ZSB0aGUgcG9zaXRpb25zIG9mIHRoZSBwYXR0ZXJuIGFzIG9mZnNldHMgZnJvbSB0aGUgcGF0aCBzdGFydFxuICBjb25zdCBwb3NpdGlvbk9mZnNldHMgPSBbXTtcbiAgbGV0IHBvc2l0aW9uT2Zmc2V0ID0gc3RhcnRPZmZzZXRQaXhlbHM7XG4gIGRvIHtcbiAgICBwb3NpdGlvbk9mZnNldHMucHVzaChwb3NpdGlvbk9mZnNldCk7XG4gICAgcG9zaXRpb25PZmZzZXQgKz0gcmVwZWF0SW50ZXJ2YWxQaXhlbHM7XG4gIH0gd2hpbGUgKFxuICAgIHJlcGVhdEludGVydmFsUGl4ZWxzID4gMCAmJlxuICAgIHBvc2l0aW9uT2Zmc2V0IDwgdG90YWxQYXRoTGVuZ3RoIC0gZW5kT2Zmc2V0UGl4ZWxzXG4gICk7XG5cbiAgLy8gMy4gcHJvamVjdHMgb2Zmc2V0cyB0byBzZWdtZW50c1xuICBsZXQgc2VnbWVudEluZGV4ID0gMDtcbiAgbGV0IHNlZ21lbnQgPSBzZWdtZW50c1swXTtcbiAgcmV0dXJuIHBvc2l0aW9uT2Zmc2V0cy5tYXAoKHBvc2l0aW9uT2Zmc2V0KSA9PiB7XG4gICAgLy8gZmluZCB0aGUgc2VnbWVudCBtYXRjaGluZyB0aGUgb2Zmc2V0LFxuICAgIC8vIHN0YXJ0aW5nIGZyb20gdGhlIHByZXZpb3VzIG9uZSBhcyBvZmZzZXRzIGFyZSBvcmRlcmVkXG4gICAgd2hpbGUgKHBvc2l0aW9uT2Zmc2V0ID4gc2VnbWVudC5kaXN0QiAmJiBzZWdtZW50SW5kZXggPCBuYlNlZ21lbnRzIC0gMSkge1xuICAgICAgc2VnbWVudEluZGV4Kys7XG4gICAgICBzZWdtZW50ID0gc2VnbWVudHNbc2VnbWVudEluZGV4XTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWdtZW50UmF0aW8gPVxuICAgICAgKHBvc2l0aW9uT2Zmc2V0IC0gc2VnbWVudC5kaXN0QSkgLyAoc2VnbWVudC5kaXN0QiAtIHNlZ21lbnQuZGlzdEEpO1xuICAgIHJldHVybiB7XG4gICAgICBwdDogaW50ZXJwb2xhdGVCZXR3ZWVuUG9pbnRzKHNlZ21lbnQuYSwgc2VnbWVudC5iLCBzZWdtZW50UmF0aW8pLFxuICAgICAgaGVhZGluZzogc2VnbWVudC5oZWFkaW5nLFxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBwb2ludCB3aGljaCBsaWVzIG9uIHRoZSBzZWdtZW50IGRlZmluZWQgYnkgcG9pbnRzIEEgYW5kIEIsXG4gKiBhdCB0aGUgZ2l2ZW4gcmF0aW8gb2YgdGhlIGRpc3RhbmNlIGZyb20gQSB0byBCLCBieSBsaW5lYXIgaW50ZXJwb2xhdGlvbi5cbiAqL1xuZnVuY3Rpb24gaW50ZXJwb2xhdGVCZXR3ZWVuUG9pbnRzKHB0QSwgcHRCLCByYXRpbykge1xuICBpZiAocHRCLnggIT09IHB0QS54KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHB0QS54ICsgcmF0aW8gKiAocHRCLnggLSBwdEEueCksXG4gICAgICB5OiBwdEEueSArIHJhdGlvICogKHB0Qi55IC0gcHRBLnkpLFxuICAgIH07XG4gIH1cbiAgLy8gc3BlY2lhbCBjYXNlIHdoZXJlIHBvaW50cyBsaWUgb24gdGhlIHNhbWUgdmVydGljYWwgYXhpc1xuICByZXR1cm4ge1xuICAgIHg6IHB0QS54LFxuICAgIHk6IHB0QS55ICsgKHB0Qi55IC0gcHRBLnkpICogcmF0aW8sXG4gIH07XG59XG5cbmV4cG9ydCB7XG4gIHByb2plY3RQYXR0ZXJuT25Qb2ludFBhdGgsXG4gIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUsXG4gIC8vIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYXJlIGV4cG9ydGVkIG9ubHkgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3NlXG4gIGNvbXB1dGVTZWdtZW50SGVhZGluZyxcbiAgYXNSYXRpb1RvUGF0aExlbmd0aCxcbn07XG5cbndpbmRvdy5MID0gTDtcbndpbmRvdy5MLnBvbHlsaW5lRGVjb3JhdG9yID0gTC5wb2x5bGluZURlY29yYXRvcjtcbndpbmRvdy5MLlN5bWJvbCA9IEwuU3ltYm9sO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxJQUFBQSxRQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFFQUEsT0FBQTtBQURBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBQyxnQkFBQyxDQUFDQyxNQUFNLEdBQUdELGdCQUFDLENBQUNDLE1BQU0sSUFBSSxDQUFDLENBQUM7O0FBRXpCO0FBQ0E7QUFDQTtBQUNBO0FBQ0FELGdCQUFDLENBQUNDLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHRixnQkFBQyxDQUFDRyxLQUFLLENBQUNDLE1BQU0sQ0FBQztFQUM3QkMsT0FBTyxFQUFFO0lBQ1BD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
|
|
386
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbGVhZmxldCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiTCIsIlN5bWJvbCIsIkRhc2giLCJDbGFzcyIsImV4dGVuZCIsIm9wdGlvbnMiLCJwaXhlbFNpemUiLCJwYXRoT3B0aW9ucyIsImluaXRpYWxpemUiLCJVdGlsIiwic2V0T3B0aW9ucyIsImNsaWNrYWJsZSIsImJ1aWxkU3ltYm9sIiwiZGlyUG9pbnQiLCJsYXRMbmdzIiwibWFwIiwiaW5kZXgiLCJ0b3RhbCIsIm9wdHMiLCJkMnIiLCJNYXRoIiwiUEkiLCJwb2x5bGluZSIsImxhdExuZyIsIm1pZFBvaW50IiwicHJvamVjdCIsImFuZ2xlIiwiaGVhZGluZyIsImEiLCJwb2ludCIsIngiLCJjb3MiLCJ5Iiwic2luIiwiYiIsImFkZCIsInN1YnRyYWN0IiwidW5wcm9qZWN0IiwiZGFzaCIsIkFycm93SGVhZCIsInBvbHlnb24iLCJoZWFkQW5nbGUiLCJzdHJva2UiLCJ3ZWlnaHQiLCJfYnVpbGRBcnJvd1BhdGgiLCJ0aXBQb2ludCIsImRpcmVjdGlvbiIsInJhZGlhbkFycm93QW5nbGUiLCJoZWFkQW5nbGUxIiwiaGVhZEFuZ2xlMiIsImFycm93SGVhZDEiLCJhcnJvd0hlYWQyIiwiYXJyb3dIZWFkIiwiTWFya2VyIiwibWFya2VyT3B0aW9ucyIsInJvdGF0ZSIsImRyYWdnYWJsZSIsImRpcmVjdGlvblBvaW50Iiwicm90YXRpb25BbmdsZSIsImFuZ2xlQ29ycmVjdGlvbiIsIm1hcmtlciIsImlzQ29vcmQiLCJjIiwiTGF0TG5nIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNDb29yZEFycmF5IiwibGwiLCJQb2x5bGluZURlY29yYXRvciIsIkZlYXR1cmVHcm91cCIsInBhdHRlcm5zIiwicGF0aHMiLCJwcm90b3R5cGUiLCJjYWxsIiwiX21hcCIsIl9wYXRocyIsIl9pbml0UGF0aHMiLCJfYm91bmRzIiwiX2luaXRCb3VuZHMiLCJfcGF0dGVybnMiLCJfaW5pdFBhdHRlcm5zIiwiaW5wdXQiLCJpc1BvbHlnb24iLCJfdGhpcyIsImNvb3JkcyIsImNvbmNhdCIsIlBvbHlsaW5lIiwiZ2V0TGF0TG5ncyIsIlBvbHlnb24iLCJyZWR1Y2UiLCJmbGF0QXJyYXkiLCJwIiwicGF0dGVybkRlZnMiLCJfcGFyc2VQYXR0ZXJuRGVmIiwic2V0UGF0dGVybnMiLCJyZWRyYXciLCJzZXRQYXRocyIsInBhdHRlcm5EZWYiLCJzeW1ib2xGYWN0b3J5Iiwic3ltYm9sIiwib2Zmc2V0IiwicGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSIsImVuZE9mZnNldCIsInJlcGVhdCIsIm9uQWRkIiwiX2RyYXciLCJvbiIsIm9uUmVtb3ZlIiwib2ZmIiwiYWxsUGF0aENvb3JkcyIsImFjYyIsInBhdGgiLCJsYXRMbmdCb3VuZHMiLCJnZXRCb3VuZHMiLCJfYnVpbGRTeW1ib2xzIiwiZGlyZWN0aW9uUG9pbnRzIiwiX3RoaXMyIiwiaSIsIl9nZXREaXJlY3Rpb25Qb2ludHMiLCJwYXR0ZXJuIiwiX3RoaXMzIiwicGF0aEFzUG9pbnRzIiwicHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCIsInB0IiwiY2xlYXJMYXllcnMiLCJfZ2V0UGF0dGVybkxheWVycyIsIl90aGlzNCIsIm1hcEJvdW5kcyIsInBhZCIsImZpbHRlciIsImNvbnRhaW5zIiwiZmVhdHVyZUdyb3VwIiwiX3RoaXM1IiwiZm9yRWFjaCIsImxheWVycyIsImFkZExheWVyIiwicG9seWxpbmVEZWNvcmF0b3IiLCJwb2ludERpc3RhbmNlIiwicHRBIiwicHRCIiwic3FydCIsImNvbXB1dGVTZWdtZW50SGVhZGluZyIsImF0YW4yIiwiZXhwb3J0cyIsImFzUmF0aW9Ub1BhdGhMZW5ndGgiLCJfcmVmIiwidG90YWxQYXRoTGVuZ3RoIiwidmFsdWUiLCJpc0luUGl4ZWxzIiwiaW5kZXhPZiIsInBhcnNlRmxvYXQiLCJwYXJzZWRWYWx1ZSIsInBvaW50c0VxdWFsIiwicG9pbnRzVG9TZWdtZW50cyIsInB0cyIsInNlZ21lbnRzIiwiaWR4IiwicG9pbnRzIiwiZGlzdEEiLCJkaXN0QiIsImRpc3RBQiIsInB1c2giLCJuYlNlZ21lbnRzIiwicmVwZWF0SW50ZXJ2YWxQaXhlbHMiLCJzdGFydE9mZnNldFBpeGVscyIsImVuZE9mZnNldFBpeGVscyIsInBvc2l0aW9uT2Zmc2V0cyIsInBvc2l0aW9uT2Zmc2V0Iiwic2VnbWVudEluZGV4Iiwic2VnbWVudCIsInNlZ21lbnRSYXRpbyIsImludGVycG9sYXRlQmV0d2VlblBvaW50cyIsInJhdGlvIiwid2luZG93Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxpdGllcy9wb2x5bGluZWRlY29yYXRvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTCBmcm9tICdsZWFmbGV0Jztcbi8vIGVuYWJsZSByb3RhdGlvbkFuZ2xlIGFuZCByb3RhdGlvbk9yaWdpbiBzdXBwb3J0IG9uIEwuTWFya2VyXG5pbXBvcnQgJ2xlYWZsZXQtcm90YXRlZG1hcmtlcic7XG5cbi8qKlxuICogRGVmaW5lcyBzZXZlcmFsIGNsYXNzZXMgb2Ygc3ltYm9sIGZhY3RvcmllcyxcbiAqIHRvIGJlIHVzZWQgd2l0aCBMLlBvbHlsaW5lRGVjb3JhdG9yXG4gKi9cblxuTC5TeW1ib2wgPSBMLlN5bWJvbCB8fCB7fTtcblxuLyoqXG4gKiBBIHNpbXBsZSBkYXNoIHN5bWJvbCwgZHJhd24gYXMgYSBQb2x5bGluZS5cbiAqIENhbiBhbHNvIGJlIHVzZWQgZm9yIGRvdHMsIGlmICdwaXhlbFNpemUnIG9wdGlvbiBpcyBnaXZlbiB0aGUgMCB2YWx1ZS5cbiAqL1xuTC5TeW1ib2wuRGFzaCA9IEwuQ2xhc3MuZXh0ZW5kKHtcbiAgb3B0aW9uczoge1xuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgcGF0aE9wdGlvbnM6IHt9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucztcbiAgICBjb25zdCBkMnIgPSBNYXRoLlBJIC8gMTgwO1xuXG4gICAgLy8gZm9yIGEgZG90LCBub3RoaW5nIG1vcmUgdG8gY29tcHV0ZVxuICAgIGlmIChvcHRzLnBpeGVsU2l6ZSA8PSAxKSB7XG4gICAgICByZXR1cm4gTC5wb2x5bGluZShbZGlyUG9pbnQubGF0TG5nLCBkaXJQb2ludC5sYXRMbmddLCBvcHRzLnBhdGhPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCBtaWRQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgYW5nbGUgPSAtKGRpclBvaW50LmhlYWRpbmcgLSA5MCkgKiBkMnI7XG4gICAgY29uc3QgYSA9IEwucG9pbnQoXG4gICAgICBtaWRQb2ludC54ICsgKG9wdHMucGl4ZWxTaXplICogTWF0aC5jb3MoYW5nbGUgKyBNYXRoLlBJKSkgLyAyLFxuICAgICAgbWlkUG9pbnQueSArIChvcHRzLnBpeGVsU2l6ZSAqIE1hdGguc2luKGFuZ2xlKSkgLyAyLFxuICAgICk7XG4gICAgLy8gY29tcHV0ZSBzZWNvbmQgcG9pbnQgYnkgY2VudHJhbCBzeW1tZXRyeSB0byBhdm9pZCB1bmVjZXNzYXJ5IGNvcy9zaW5cbiAgICBjb25zdCBiID0gbWlkUG9pbnQuYWRkKG1pZFBvaW50LnN1YnRyYWN0KGEpKTtcbiAgICByZXR1cm4gTC5wb2x5bGluZShbbWFwLnVucHJvamVjdChhKSwgbWFwLnVucHJvamVjdChiKV0sIG9wdHMucGF0aE9wdGlvbnMpO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmRhc2ggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLkRhc2gob3B0aW9ucyk7XG59O1xuXG5MLlN5bWJvbC5BcnJvd0hlYWQgPSBMLkNsYXNzLmV4dGVuZCh7XG4gIG9wdGlvbnM6IHtcbiAgICBwb2x5Z29uOiB0cnVlLFxuICAgIHBpeGVsU2l6ZTogMTAsXG4gICAgaGVhZEFuZ2xlOiA2MCxcbiAgICBwYXRoT3B0aW9uczoge1xuICAgICAgc3Ryb2tlOiBmYWxzZSxcbiAgICAgIHdlaWdodDogMixcbiAgICB9LFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb2x5Z29uXG4gICAgICA/IEwucG9seWdvbih0aGlzLl9idWlsZEFycm93UGF0aChkaXJQb2ludCwgbWFwKSwgdGhpcy5vcHRpb25zLnBhdGhPcHRpb25zKVxuICAgICAgOiBMLnBvbHlsaW5lKFxuICAgICAgICAgIHRoaXMuX2J1aWxkQXJyb3dQYXRoKGRpclBvaW50LCBtYXApLFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5wYXRoT3B0aW9ucyxcbiAgICAgICAgKTtcbiAgfSxcblxuICBfYnVpbGRBcnJvd1BhdGg6IGZ1bmN0aW9uIChkaXJQb2ludCwgbWFwKSB7XG4gICAgY29uc3QgZDJyID0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCB0aXBQb2ludCA9IG1hcC5wcm9qZWN0KGRpclBvaW50LmxhdExuZyk7XG4gICAgY29uc3QgZGlyZWN0aW9uID0gLShkaXJQb2ludC5oZWFkaW5nIC0gOTApICogZDJyO1xuICAgIGNvbnN0IHJhZGlhbkFycm93QW5nbGUgPSAodGhpcy5vcHRpb25zLmhlYWRBbmdsZSAvIDIpICogZDJyO1xuXG4gICAgY29uc3QgaGVhZEFuZ2xlMSA9IGRpcmVjdGlvbiArIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgaGVhZEFuZ2xlMiA9IGRpcmVjdGlvbiAtIHJhZGlhbkFycm93QW5nbGU7XG4gICAgY29uc3QgYXJyb3dIZWFkMSA9IEwucG9pbnQoXG4gICAgICB0aXBQb2ludC54IC0gdGhpcy5vcHRpb25zLnBpeGVsU2l6ZSAqIE1hdGguY29zKGhlYWRBbmdsZTEpLFxuICAgICAgdGlwUG9pbnQueSArIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLnNpbihoZWFkQW5nbGUxKSxcbiAgICApO1xuICAgIGNvbnN0IGFycm93SGVhZDIgPSBMLnBvaW50KFxuICAgICAgdGlwUG9pbnQueCAtIHRoaXMub3B0aW9ucy5waXhlbFNpemUgKiBNYXRoLmNvcyhoZWFkQW5nbGUyKSxcbiAgICAgIHRpcFBvaW50LnkgKyB0aGlzLm9wdGlvbnMucGl4ZWxTaXplICogTWF0aC5zaW4oaGVhZEFuZ2xlMiksXG4gICAgKTtcblxuICAgIHJldHVybiBbXG4gICAgICBtYXAudW5wcm9qZWN0KGFycm93SGVhZDEpLFxuICAgICAgZGlyUG9pbnQubGF0TG5nLFxuICAgICAgbWFwLnVucHJvamVjdChhcnJvd0hlYWQyKSxcbiAgICBdO1xuICB9LFxufSk7XG5cbkwuU3ltYm9sLmFycm93SGVhZCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5TeW1ib2wuQXJyb3dIZWFkKG9wdGlvbnMpO1xufTtcblxuTC5TeW1ib2wuTWFya2VyID0gTC5DbGFzcy5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgbWFya2VyT3B0aW9uczoge30sXG4gICAgcm90YXRlOiBmYWxzZSxcbiAgfSxcblxuICBpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIEwuVXRpbC5zZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmNsaWNrYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLmRyYWdnYWJsZSA9IGZhbHNlO1xuICB9LFxuXG4gIGJ1aWxkU3ltYm9sOiBmdW5jdGlvbiAoZGlyZWN0aW9uUG9pbnQsIGxhdExuZ3MsIG1hcCwgaW5kZXgsIHRvdGFsKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5yb3RhdGUpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zLnJvdGF0aW9uQW5nbGUgPVxuICAgICAgICBkaXJlY3Rpb25Qb2ludC5oZWFkaW5nICsgKHRoaXMub3B0aW9ucy5hbmdsZUNvcnJlY3Rpb24gfHwgMCk7XG4gICAgfVxuICAgIHJldHVybiBMLm1hcmtlcihkaXJlY3Rpb25Qb2ludC5sYXRMbmcsIHRoaXMub3B0aW9ucy5tYXJrZXJPcHRpb25zKTtcbiAgfSxcbn0pO1xuXG5MLlN5bWJvbC5tYXJrZXIgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICByZXR1cm4gbmV3IEwuU3ltYm9sLk1hcmtlcihvcHRpb25zKTtcbn07XG5cbmNvbnN0IGlzQ29vcmQgPSAoYykgPT5cbiAgYyBpbnN0YW5jZW9mIEwuTGF0TG5nIHx8XG4gIChBcnJheS5pc0FycmF5KGMpICYmIGMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBjWzBdID09PSAnbnVtYmVyJyk7XG5cbmNvbnN0IGlzQ29vcmRBcnJheSA9IChsbCkgPT4gQXJyYXkuaXNBcnJheShsbCkgJiYgaXNDb29yZChsbFswXSk7XG5cbkwuUG9seWxpbmVEZWNvcmF0b3IgPSBMLkZlYXR1cmVHcm91cC5leHRlbmQoe1xuICBvcHRpb25zOiB7XG4gICAgcGF0dGVybnM6IFtdLFxuICB9LFxuXG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uIChwYXRocywgb3B0aW9ucykge1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7XG4gICAgTC5VdGlsLnNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gICAgdGhpcy5fbWFwID0gbnVsbDtcbiAgICB0aGlzLl9wYXRocyA9IHRoaXMuX2luaXRQYXRocyhwYXRocyk7XG4gICAgdGhpcy5fYm91bmRzID0gdGhpcy5faW5pdEJvdW5kcygpO1xuICAgIHRoaXMuX3BhdHRlcm5zID0gdGhpcy5faW5pdFBhdHRlcm5zKHRoaXMub3B0aW9ucy5wYXR0ZXJucyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlYWxzIHdpdGggYWxsIHRoZSBkaWZmZXJlbnQgY2FzZXMuIGlucHV0IGNhbiBiZSBvbmUgb2YgdGhlc2UgdHlwZXM6XG4gICAqIGFycmF5IG9mIExhdExuZywgYXJyYXkgb2YgMi1udW1iZXIgYXJyYXlzLCBQb2x5bGluZSwgUG9seWdvbixcbiAgICogYXJyYXkgb2Ygb25lIG9mIHRoZSBwcmV2aW91cy5cbiAgICovXG4gIF9pbml0UGF0aHM6IGZ1bmN0aW9uIChpbnB1dCwgaXNQb2x5Z29uKSB7XG4gICAgaWYgKGlzQ29vcmRBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIExlYWZsZXQgUG9seWdvbnMgZG9uJ3QgbmVlZCB0aGUgZmlyc3QgcG9pbnQgdG8gYmUgcmVwZWF0ZWQsIGJ1dCB3ZSBkb1xuICAgICAgY29uc3QgY29vcmRzID0gaXNQb2x5Z29uID8gaW5wdXQuY29uY2F0KFtpbnB1dFswXV0pIDogaW5wdXQ7XG4gICAgICByZXR1cm4gW2Nvb3Jkc107XG4gICAgfVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEwuUG9seWxpbmUpIHtcbiAgICAgIC8vIHdlIG5lZWQgc29tZSByZWN1cnNpdml0eSB0byBzdXBwb3J0IG11bHRpLXBvbHkqXG4gICAgICByZXR1cm4gdGhpcy5faW5pdFBhdGhzKGlucHV0LmdldExhdExuZ3MoKSwgaW5wdXQgaW5zdGFuY2VvZiBMLlBvbHlnb24pO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgIC8vIGZsYXR0ZW4gZXZlcnl0aGluZywgd2UganVzdCBuZWVkIGNvb3JkaW5hdGUgbGlzdHMgdG8gYXBwbHkgcGF0dGVybnNcbiAgICAgIHJldHVybiBpbnB1dC5yZWR1Y2UoXG4gICAgICAgIChmbGF0QXJyYXksIHApID0+IGZsYXRBcnJheS5jb25jYXQodGhpcy5faW5pdFBhdGhzKHAsIGlzUG9seWdvbikpLFxuICAgICAgICBbXSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcblxuICAvLyBwYXJzZSBwYXR0ZXJuIGRlZmluaXRpb25zIGFuZCBwcmVjb21wdXRlIHNvbWUgdmFsdWVzXG4gIF9pbml0UGF0dGVybnM6IGZ1bmN0aW9uIChwYXR0ZXJuRGVmcykge1xuICAgIHJldHVybiBwYXR0ZXJuRGVmcy5tYXAodGhpcy5fcGFyc2VQYXR0ZXJuRGVmKTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hhbmdlcyB0aGUgcGF0dGVybnMgdXNlZCBieSB0aGlzIGRlY29yYXRvclxuICAgKiBhbmQgcmVkcmF3cyB0aGUgbmV3IG9uZS5cbiAgICovXG4gIHNldFBhdHRlcm5zOiBmdW5jdGlvbiAocGF0dGVybnMpIHtcbiAgICB0aGlzLm9wdGlvbnMucGF0dGVybnMgPSBwYXR0ZXJucztcbiAgICB0aGlzLl9wYXR0ZXJucyA9IHRoaXMuX2luaXRQYXR0ZXJucyh0aGlzLm9wdGlvbnMucGF0dGVybnMpO1xuICAgIHRoaXMucmVkcmF3KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENoYW5nZXMgdGhlIHBhdHRlcm5zIHVzZWQgYnkgdGhpcyBkZWNvcmF0b3JcbiAgICogYW5kIHJlZHJhd3MgdGhlIG5ldyBvbmUuXG4gICAqL1xuICBzZXRQYXRoczogZnVuY3Rpb24gKHBhdGhzKSB7XG4gICAgdGhpcy5fcGF0aHMgPSB0aGlzLl9pbml0UGF0aHMocGF0aHMpO1xuICAgIHRoaXMuX2JvdW5kcyA9IHRoaXMuX2luaXRCb3VuZHMoKTtcbiAgICB0aGlzLnJlZHJhdygpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcGF0dGVybiBkZWZpbml0aW9uXG4gICAqL1xuICBfcGFyc2VQYXR0ZXJuRGVmOiBmdW5jdGlvbiAocGF0dGVybkRlZiwgbGF0TG5ncykge1xuICAgIHJldHVybiB7XG4gICAgICBzeW1ib2xGYWN0b3J5OiBwYXR0ZXJuRGVmLnN5bWJvbCxcbiAgICAgIC8vIFBhcnNlIG9mZnNldCBhbmQgcmVwZWF0IHZhbHVlcywgbWFuYWdpbmcgdGhlIHR3byBjYXNlczpcbiAgICAgIC8vIGFic29sdXRlIChpbiBwaXhlbHMpIG9yIHJlbGF0aXZlIChpbiBwZXJjZW50YWdlIG9mIHRoZSBwb2x5bGluZSBsZW5ndGgpXG4gICAgICBvZmZzZXQ6IHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUocGF0dGVybkRlZi5vZmZzZXQpLFxuICAgICAgZW5kT2Zmc2V0OiBwYXJzZVJlbGF0aXZlT3JBYnNvbHV0ZVZhbHVlKHBhdHRlcm5EZWYuZW5kT2Zmc2V0KSxcbiAgICAgIHJlcGVhdDogcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZShwYXR0ZXJuRGVmLnJlcGVhdCksXG4gICAgfTtcbiAgfSxcblxuICBvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICAgIHRoaXMuX21hcCA9IG1hcDtcbiAgICB0aGlzLl9kcmF3KCk7XG4gICAgdGhpcy5fbWFwLm9uKCdtb3ZlZW5kJywgdGhpcy5yZWRyYXcsIHRoaXMpO1xuICB9LFxuXG4gIG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gICAgdGhpcy5fbWFwLm9mZignbW92ZWVuZCcsIHRoaXMucmVkcmF3LCB0aGlzKTtcbiAgICB0aGlzLl9tYXAgPSBudWxsO1xuICAgIEwuRmVhdHVyZUdyb3VwLnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFzIHJlYWwgcGF0dGVybiBib3VuZHMgZGVwZW5kcyBvbiBtYXAgem9vbSBhbmQgYm91bmRzLFxuICAgKiB3ZSBqdXN0IGNvbXB1dGUgdGhlIHRvdGFsIGJvdW5kcyBvZiBhbGwgcGF0aHMgZGVjb3JhdGVkIGJ5IHRoaXMgaW5zdGFuY2UuXG4gICAqL1xuICBfaW5pdEJvdW5kczogZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFsbFBhdGhDb29yZHMgPSB0aGlzLl9wYXRocy5yZWR1Y2UoXG4gICAgICAoYWNjLCBwYXRoKSA9PiBhY2MuY29uY2F0KHBhdGgpLFxuICAgICAgW10sXG4gICAgKTtcbiAgICByZXR1cm4gTC5sYXRMbmdCb3VuZHMoYWxsUGF0aENvb3Jkcyk7XG4gIH0sXG5cbiAgZ2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JvdW5kcztcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBJTGF5ZXJzIG9iamVjdFxuICAgKi9cbiAgX2J1aWxkU3ltYm9sczogZnVuY3Rpb24gKGxhdExuZ3MsIHN5bWJvbEZhY3RvcnksIGRpcmVjdGlvblBvaW50cykge1xuICAgIHJldHVybiBkaXJlY3Rpb25Qb2ludHMubWFwKChkaXJlY3Rpb25Qb2ludCwgaSkgPT5cbiAgICAgIHN5bWJvbEZhY3RvcnkuYnVpbGRTeW1ib2woXG4gICAgICAgIGRpcmVjdGlvblBvaW50LFxuICAgICAgICBsYXRMbmdzLFxuICAgICAgICB0aGlzLl9tYXAsXG4gICAgICAgIGksXG4gICAgICAgIGRpcmVjdGlvblBvaW50cy5sZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENvbXB1dGUgcGFpcnMgb2YgTGF0TG5nIGFuZCBoZWFkaW5nIGFuZ2xlLFxuICAgKiB0aGF0IGRlZmluZSBwb3NpdGlvbnMgYW5kIGRpcmVjdGlvbnMgb2YgdGhlIHN5bWJvbHMgb24gdGhlIHBhdGhcbiAgICovXG4gIF9nZXREaXJlY3Rpb25Qb2ludHM6IGZ1bmN0aW9uIChsYXRMbmdzLCBwYXR0ZXJuKSB7XG4gICAgaWYgKGxhdExuZ3MubGVuZ3RoIDwgMikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBjb25zdCBwYXRoQXNQb2ludHMgPSBsYXRMbmdzLm1hcCgobGF0TG5nKSA9PiB0aGlzLl9tYXAucHJvamVjdChsYXRMbmcpKTtcbiAgICByZXR1cm4gcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aChwYXRoQXNQb2ludHMsIHBhdHRlcm4pLm1hcCgocG9pbnQpID0+ICh7XG4gICAgICBsYXRMbmc6IHRoaXMuX21hcC51bnByb2plY3QoTC5wb2ludChwb2ludC5wdCkpLFxuICAgICAgaGVhZGluZzogcG9pbnQuaGVhZGluZyxcbiAgICB9KSk7XG4gIH0sXG5cbiAgcmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCF0aGlzLl9tYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbGVhckxheWVycygpO1xuICAgIHRoaXMuX2RyYXcoKTtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgc3ltYm9scyBmb3IgYSBnaXZlbiBwYXR0ZXJuIGFzIGFuIGFycmF5IG9mIEZlYXR1cmVHcm91cFxuICAgKi9cbiAgX2dldFBhdHRlcm5MYXllcnM6IGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgY29uc3QgbWFwQm91bmRzID0gdGhpcy5fbWFwLmdldEJvdW5kcygpLnBhZCgwLjEpO1xuICAgIHJldHVybiB0aGlzLl9wYXRocy5tYXAoKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IGRpcmVjdGlvblBvaW50cyA9IHRoaXMuX2dldERpcmVjdGlvblBvaW50cyhwYXRoLCBwYXR0ZXJuKVxuICAgICAgICAvLyBmaWx0ZXIgb3V0IGludmlzaWJsZSBwb2ludHNcbiAgICAgICAgLmZpbHRlcigocG9pbnQpID0+IG1hcEJvdW5kcy5jb250YWlucyhwb2ludC5sYXRMbmcpKTtcbiAgICAgIHJldHVybiBMLmZlYXR1cmVHcm91cChcbiAgICAgICAgdGhpcy5fYnVpbGRTeW1ib2xzKHBhdGgsIHBhdHRlcm4uc3ltYm9sRmFjdG9yeSwgZGlyZWN0aW9uUG9pbnRzKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERyYXcgYWxsIHBhdHRlcm5zXG4gICAqL1xuICBfZHJhdzogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX3BhdHRlcm5zXG4gICAgICAubWFwKChwYXR0ZXJuKSA9PiB0aGlzLl9nZXRQYXR0ZXJuTGF5ZXJzKHBhdHRlcm4pKVxuICAgICAgLmZvckVhY2goKGxheWVycykgPT4ge1xuICAgICAgICB0aGlzLmFkZExheWVyKEwuZmVhdHVyZUdyb3VwKGxheWVycykpO1xuICAgICAgfSk7XG4gIH0sXG59KTtcbi8qXG4gKiBBbGxvd3MgY29tcGFjdCBzeW50YXggdG8gYmUgdXNlZFxuICovXG5MLnBvbHlsaW5lRGVjb3JhdG9yID0gZnVuY3Rpb24gKHBhdGhzLCBvcHRpb25zKSB7XG4gIHJldHVybiBuZXcgTC5Qb2x5bGluZURlY29yYXRvcihwYXRocywgb3B0aW9ucyk7XG59O1xuXG4vLyBmdW5jdGlvbmFsIHJlLWltcGwgb2YgTC5Qb2ludC5kaXN0YW5jZVRvLFxuLy8gd2l0aCBubyBkZXBlbmRlbmN5IG9uIExlYWZsZXQgZm9yIGVhc2llciB0ZXN0aW5nXG5mdW5jdGlvbiBwb2ludERpc3RhbmNlKHB0QSwgcHRCKSB7XG4gIGNvbnN0IHggPSBwdEIueCAtIHB0QS54O1xuICBjb25zdCB5ID0gcHRCLnkgLSBwdEEueTtcbiAgcmV0dXJuIE1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbn1cblxuY29uc3QgY29tcHV0ZVNlZ21lbnRIZWFkaW5nID0gKGEsIGIpID0+XG4gICgoTWF0aC5hdGFuMihiLnkgLSBhLnksIGIueCAtIGEueCkgKiAxODApIC8gTWF0aC5QSSArIDkwICsgMzYwKSAlIDM2MDtcblxuY29uc3QgYXNSYXRpb1RvUGF0aExlbmd0aCA9ICh7IHZhbHVlLCBpc0luUGl4ZWxzIH0sIHRvdGFsUGF0aExlbmd0aCkgPT5cbiAgaXNJblBpeGVscyA/IHZhbHVlIC8gdG90YWxQYXRoTGVuZ3RoIDogdmFsdWU7XG5cbmZ1bmN0aW9uIHBhcnNlUmVsYXRpdmVPckFic29sdXRlVmFsdWUodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUuaW5kZXhPZignJScpICE9PSAtMSkge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogcGFyc2VGbG9hdCh2YWx1ZSkgLyAxMDAsXG4gICAgICBpc0luUGl4ZWxzOiBmYWxzZSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHBhcnNlZFZhbHVlID0gdmFsdWUgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IDA7XG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHBhcnNlZFZhbHVlLFxuICAgIGlzSW5QaXhlbHM6IHBhcnNlZFZhbHVlID4gMCxcbiAgfTtcbn1cblxuY29uc3QgcG9pbnRzRXF1YWwgPSAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnk7XG5cbmZ1bmN0aW9uIHBvaW50c1RvU2VnbWVudHMocHRzKSB7XG4gIHJldHVybiBwdHMucmVkdWNlKChzZWdtZW50cywgYiwgaWR4LCBwb2ludHMpID0+IHtcbiAgICAvLyB0aGlzIHRlc3Qgc2tpcHMgc2FtZSBhZGphY2VudCBwb2ludHNcbiAgICBpZiAoaWR4ID4gMCAmJiAhcG9pbnRzRXF1YWwoYiwgcG9pbnRzW2lkeCAtIDFdKSkge1xuICAgICAgY29uc3QgYSA9IHBvaW50c1tpZHggLSAxXTtcbiAgICAgIGNvbnN0IGRpc3RBID1cbiAgICAgICAgc2VnbWVudHMubGVuZ3RoID4gMCA/IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdLmRpc3RCIDogMDtcbiAgICAgIGNvbnN0IGRpc3RBQiA9IHBvaW50RGlzdGFuY2UoYSwgYik7XG4gICAgICBzZWdtZW50cy5wdXNoKHtcbiAgICAgICAgYSxcbiAgICAgICAgYixcbiAgICAgICAgZGlzdEEsXG4gICAgICAgIGRpc3RCOiBkaXN0QSArIGRpc3RBQixcbiAgICAgICAgaGVhZGluZzogY29tcHV0ZVNlZ21lbnRIZWFkaW5nKGEsIGIpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBzZWdtZW50cztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBwcm9qZWN0UGF0dGVybk9uUG9pbnRQYXRoKHB0cywgcGF0dGVybikge1xuICAvLyAxLiBzcGxpdCB0aGUgcGF0aCBpbnRvIHNlZ21lbnQgaW5mb3NcbiAgY29uc3Qgc2VnbWVudHMgPSBwb2ludHNUb1NlZ21lbnRzKHB0cyk7XG4gIGNvbnN0IG5iU2VnbWVudHMgPSBzZWdtZW50cy5sZW5ndGg7XG4gIGlmIChuYlNlZ21lbnRzID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgdG90YWxQYXRoTGVuZ3RoID0gc2VnbWVudHNbbmJTZWdtZW50cyAtIDFdLmRpc3RCO1xuXG4gIGNvbnN0IG9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5vZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IGVuZE9mZnNldCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5lbmRPZmZzZXQsIHRvdGFsUGF0aExlbmd0aCk7XG4gIGNvbnN0IHJlcGVhdCA9IGFzUmF0aW9Ub1BhdGhMZW5ndGgocGF0dGVybi5yZXBlYXQsIHRvdGFsUGF0aExlbmd0aCk7XG5cbiAgY29uc3QgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPSB0b3RhbFBhdGhMZW5ndGggKiByZXBlYXQ7XG4gIGNvbnN0IHN0YXJ0T2Zmc2V0UGl4ZWxzID0gb2Zmc2V0ID4gMCA/IHRvdGFsUGF0aExlbmd0aCAqIG9mZnNldCA6IDA7XG4gIGNvbnN0IGVuZE9mZnNldFBpeGVscyA9IGVuZE9mZnNldCA+IDAgPyB0b3RhbFBhdGhMZW5ndGggKiBlbmRPZmZzZXQgOiAwO1xuXG4gIC8vIDIuIGdlbmVyYXRlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHBhdHRlcm4gYXMgb2Zmc2V0cyBmcm9tIHRoZSBwYXRoIHN0YXJ0XG4gIGNvbnN0IHBvc2l0aW9uT2Zmc2V0cyA9IFtdO1xuICBsZXQgcG9zaXRpb25PZmZzZXQgPSBzdGFydE9mZnNldFBpeGVscztcbiAgZG8ge1xuICAgIHBvc2l0aW9uT2Zmc2V0cy5wdXNoKHBvc2l0aW9uT2Zmc2V0KTtcbiAgICBwb3NpdGlvbk9mZnNldCArPSByZXBlYXRJbnRlcnZhbFBpeGVscztcbiAgfSB3aGlsZSAoXG4gICAgcmVwZWF0SW50ZXJ2YWxQaXhlbHMgPiAwICYmXG4gICAgcG9zaXRpb25PZmZzZXQgPCB0b3RhbFBhdGhMZW5ndGggLSBlbmRPZmZzZXRQaXhlbHNcbiAgKTtcblxuICAvLyAzLiBwcm9qZWN0cyBvZmZzZXRzIHRvIHNlZ21lbnRzXG4gIGxldCBzZWdtZW50SW5kZXggPSAwO1xuICBsZXQgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICByZXR1cm4gcG9zaXRpb25PZmZzZXRzLm1hcCgocG9zaXRpb25PZmZzZXQpID0+IHtcbiAgICAvLyBmaW5kIHRoZSBzZWdtZW50IG1hdGNoaW5nIHRoZSBvZmZzZXQsXG4gICAgLy8gc3RhcnRpbmcgZnJvbSB0aGUgcHJldmlvdXMgb25lIGFzIG9mZnNldHMgYXJlIG9yZGVyZWRcbiAgICB3aGlsZSAocG9zaXRpb25PZmZzZXQgPiBzZWdtZW50LmRpc3RCICYmIHNlZ21lbnRJbmRleCA8IG5iU2VnbWVudHMgLSAxKSB7XG4gICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdtZW50SW5kZXhdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlZ21lbnRSYXRpbyA9XG4gICAgICAocG9zaXRpb25PZmZzZXQgLSBzZWdtZW50LmRpc3RBKSAvIChzZWdtZW50LmRpc3RCIC0gc2VnbWVudC5kaXN0QSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB0OiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMoc2VnbWVudC5hLCBzZWdtZW50LmIsIHNlZ21lbnRSYXRpbyksXG4gICAgICBoZWFkaW5nOiBzZWdtZW50LmhlYWRpbmcsXG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIHBvaW50IHdoaWNoIGxpZXMgb24gdGhlIHNlZ21lbnQgZGVmaW5lZCBieSBwb2ludHMgQSBhbmQgQixcbiAqIGF0IHRoZSBnaXZlbiByYXRpbyBvZiB0aGUgZGlzdGFuY2UgZnJvbSBBIHRvIEIsIGJ5IGxpbmVhciBpbnRlcnBvbGF0aW9uLlxuICovXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZUJldHdlZW5Qb2ludHMocHRBLCBwdEIsIHJhdGlvKSB7XG4gIGlmIChwdEIueCAhPT0gcHRBLngpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcHRBLnggKyByYXRpbyAqIChwdEIueCAtIHB0QS54KSxcbiAgICAgIHk6IHB0QS55ICsgcmF0aW8gKiAocHRCLnkgLSBwdEEueSksXG4gICAgfTtcbiAgfVxuICAvLyBzcGVjaWFsIGNhc2Ugd2hlcmUgcG9pbnRzIGxpZSBvbiB0aGUgc2FtZSB2ZXJ0aWNhbCBheGlzXG4gIHJldHVybiB7XG4gICAgeDogcHRBLngsXG4gICAgeTogcHRBLnkgKyAocHRCLnkgLSBwdEEueSkgKiByYXRpbyxcbiAgfTtcbn1cblxuZXhwb3J0IHtcbiAgcHJvamVjdFBhdHRlcm5PblBvaW50UGF0aCxcbiAgcGFyc2VSZWxhdGl2ZU9yQWJzb2x1dGVWYWx1ZSxcbiAgLy8gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhcmUgZXhwb3J0ZWQgb25seSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VcbiAgY29tcHV0ZVNlZ21lbnRIZWFkaW5nLFxuICBhc1JhdGlvVG9QYXRoTGVuZ3RoLFxufTtcblxud2luZG93LkwgPSBMO1xud2luZG93LkwucG9seWxpbmVEZWNvcmF0b3IgPSBMLnBvbHlsaW5lRGVjb3JhdG9yO1xud2luZG93LkwuU3ltYm9sID0gTC5TeW1ib2w7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBQSxPQUFBO0FBREE7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUFDLGdCQUFDLENBQUNDLE1BQU0sR0FBR0QsZ0JBQUMsQ0FBQ0MsTUFBTSxJQUFJLENBQUMsQ0FBQzs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQUQsZ0JBQUMsQ0FBQ0MsTUFBTSxDQUFDQyxJQUFJLEdBQUdGLGdCQUFDLENBQUNH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
|